Hi @Mark Sharman

In the Iris, the global where localized labels reside is ^IRIS.Msg("EnsColumns"):

This global is mapped from ENSLIB database that is read only, You can't set value to this Global. 

Uncheck the Mount Read-Only option, save then you can set the value of global:

I recommend that after you finish the configuration, comeback ENSLIB database to read only. 

Hi @prashanth ponugoti 

Are you using the Private Webserver? If yes this can be the issue, because InterSystems don't recommends then use of Private Webserver in production environment. Bellow a snippet of documentation:

Conclusion

If you expect very low volume of HTTP traffic, have limited demands for high availability and secure operation, the private web server may be suitable for your development and testing needs. However, for production use, InterSystems recommends installing your own separate copy of Apache, ideally on its own server, and configuring it to use our Web Gateway to communicate with InterSystems products. If you expect a high amount of HTTP traffic, require high availability in your web server, need to integrate with other sources of web information, or need a high degree of control over your web server, you should not use the private web server.

See the documentation:  Application Use Of InterSystems Web Server

For production environment install a Webgateway in a separate machine/container if possible.

Installing the Web Gateway

Regards.

Hi @Martin Staudigel 

Create a custom client class, then override the method InvokeRequest. In the method set the property SSLCheckServerIdentity  of private property %HttpRequest to false .

Bellow a simple example:

Class User.FHIRRestClient Extends HS.FHIRServer.RestClient.HTTP
{

/// @API.Overridable<br>
/// InvokeRequest takes the Private %HttpRequest object - passed in as pRequest here -
/// and invokes the request. The HTTP response is stored as the HttpResponse property
/// of the HTTP request object. This method returns a reference to that property.<br>
/// @Input pRequest %Net.HttpRequest object.<br>
/// @Input pRequestMethod HTTP verb.<br>
/// @Input pPayload Input payload content, can be FHIR resource content or Patch content.<br>
/// @Input pRequestPath Request path, as derived by the invoked interaction-specific method.<br>
/// @Input pQueryString Query string, as derived by the invoked interaction-specific method.
Method InvokeRequest(pRequest As %RegisteredObject, pRequestMethod As %String, pRequestPath As %String, pQueryString As %String) As %RegisteredObject
{
  Set ..%HttpRequest.SSLCheckServerIdentity = 0
  Return ##Super(pRequest, pRequestMethod, pRequestPath, pQueryString)
}

}

Hi @Rochdi Badis 


With COS I don't know if is possible to do what you need. If you are using Ensemble, you can try to to achieve your needs using JavaGateway.

Some useful links:

https://www.baeldung.com/java-byte-arrays-hex-strings

https://stackoverflow.com/questions/7619058/convert-a-byte-array-to-integer-in-java-and-vice-versa

Let we know how you resolved this.

Regards.

Hi Andy.

Follows a very simple example:

Navigation Customized:

/// br.cjs.zen.TableNavigator
Class br.cjs.zen.TableNavigator Extends %ZEN.Component.tableNavigator
{

/// Este é o namespace XML para este componente.
Parameter NAMESPACE = "br.cjs.zen";

/// Contents of this composite component:
/// This is a set of paging buttons as well as text controls
/// to show the current page number.
XData Contents
{
<composite xmlns="http://www.intersystems.com/zen">
    <hgroup labelPosition="left" cellAlign="left">
        <!-- originally was a series of buttons -->
        <image id="btnFirst" onclick="zenThis.composite.gotoPage('first');" src="navigation/First.png"/>
        <image id="btnPrev"  onclick="zenThis.composite.gotoPage('prev');"  src="navigation/Previus.png"/>
        <image id="btnNext"  onclick="zenThis.composite.gotoPage('next');"  src="navigation/Next.png"/>
        <image id="btnLast"  onclick="zenThis.composite.gotoPage('last');"  src="navigation/Last.png"/>
        <!-- End -->
        <spacer width="20"/>
        <text id="pageNo" size="2" labelClass="tn-pageLabel" onchange="zenThis.composite.gotoPage(zenThis.getValue());" />
        <text id="pageCount" size="4" labelClass="tn-pageLabel" readOnly="true" />
        <spacer width="*"/>
    </hgroup>
</composite>
}

}

Sample usage:

Hi Andy,

If you are using the tableNagator you can extends and override the XData Contents with icons, in the place of default buttons. Class to extends  %ZEN.Component.tableNavigator 

If you are using the tableNagatorBar you can extends and override the javascript method renderButtons with icons, in the place of default buttons. Class to extends  %ZEN.Component.tableNavigatorBar

Hi Patrik,

For a better readability of code, switch the Quit command by Return in the portions of your code. where you relay want to return.

For example in this codesnippet in the While:

			W !, "BEGENING OF LOOP FOR: "_rs.articleCode
			IF (rs.article = article)
			{
				SET unitCode = rs.unitCode
				QUIT
			}

This Quit, only exit form While not from Method. Other problem is that the last line with Quit without argument can cause a <FUNCTION> error because doesn't return any value.

If I'm not miss understood, you can add a third parameter to use internally of method to check if the method needs to run or not. For example if the condition to stop is the unitCode is not blank change the signature of method and add the following line in the beginning of method:

A possible version to method is:

ClassMethod workpieceUnit(mainArticle As %String, article As %String, unitCode As %string = "") As %String
{
    Return:(unitCode '= "") unitCode
    
	&SQL(SELECT unit->unitCode INTO :unitCode FROM production_article.composition WHERE mainArticle = :mainArticle AND article = :article)
	
	IF SQLCODE = 0
	{
		W !, "Has Value"
		Return unitCode
	}
	ELSE
	{
		SET sql = "SELECT article, unit->unitCode,  production_article.composition_sqlArticleCode(article, type) AS articleCode FROM production_article.composition WHERE mainArticle = "_mainArticle_" AND type = 1",
		 	 rs = ##class(%SQL.Statement).%ExecDirect(,sql)
		 
		WHILE rs.%Next()
		{
			W !, "BEGENING OF LOOP FOR: "_rs.articleCode
			IF (rs.article = article)
			{
				SET unitCode = rs.unitCode
				Return unitCode
			}
			
			// CHECK IF WORKPIECE HAS COMPOSITION
			&SQL(SELECT COUNT(*) INTO :composition FROM production_article.composition WHERE mainArticle = :rs.article)
			
			IF (composition > 0)
			{
				W !, "START RECURSIVE"
				DO ..workpieceUnit(rs.article, article)
			}
		}
			
		W !, "END OF LOOP"
		Return unitCode
	}
	
	Return ""
}

Hi Sheetal,

Kill the variable that represents the processed segment at the end of loop.

If you be working with Array or List after Get or Set of the some item, call the method %UnSwizzleAt to remove the item object from memory. If the array or list be a property in a Persistent class, Save the instance of persistent class before call the %UnSwizzletAt to the item.

Hi Maciej,

You can execute this query to achieve what you want:

SELECT
  Name,
  Super,
  CASE
    WHEN Super [ 'InboundAdapter' THEN 'InboundAdapter'
    ELSE 'OutboundAdapter'
  END "Type"
  FROM
    "%Dictionary".ClassDefinition
  WHERE
    Super LIKE '%InboundAdapter%'
    OR Super LIKE '%OutboundAdapter%'

In the IRIS 2021.1

 
Name Super Type
Ens.Enterprise.MsgBank.BankTCPAdapter EnsLib.TCP.InboundAdapter,EnsLib.TCP.CountedCommon InboundAdapter
Ens.Enterprise.MsgBank.ClientTCPAdapter EnsLib.TCP.OutboundAdapter,EnsLib.TCP.CountedCommon OutboundAdapter
EnsLib.EDI.X12.Adapter.TCPInboundAdapter EnsLib.TCP.InboundAdapter InboundAdapter
EnsLib.EDI.X12.Adapter.TCPOutboundAdapter EnsLib.TCP.OutboundAdapter OutboundAdapter
EnsLib.EMail.InboundAdapter Ens.InboundAdapter InboundAdapter
EnsLib.EMail.OutboundAdapter Ens.OutboundAdapter OutboundAdapter
EnsLib.FTP.InboundAdapter EnsLib.File.InboundAdapter,EnsLib.FTP.Common InboundAdapter
EnsLib.FTP.OutboundAdapter Ens.OutboundAdapter,EnsLib.FTP.Common,EnsLib.File.Common OutboundAdapter
EnsLib.File.InboundAdapter Ens.InboundAdapter,EnsLib.File.Common InboundAdapter
EnsLib.File.OutboundAdapter Ens.OutboundAdapter,EnsLib.File.Common OutboundAdapter
EnsLib.Gateway.ServiceAdapter Ens.InboundAdapter InboundAdapter
EnsLib.HTTP.InboundAdapter EnsLib.TCP.InboundAdapter InboundAdapter
EnsLib.HTTP.OutboundAdapter Ens.OutboundAdapter OutboundAdapter
EnsLib.IWay.DSN.OutboundAdapter EnsLib.TCP.CountedOutboundAdapter OutboundAdapter
EnsLib.IWay.IBO.OutboundAdapter EnsLib.TCP.CountedOutboundAdapter OutboundAdapter
EnsLib.IWay.InboundAdapter EnsLib.TCP.CountedXMLInboundAdapter InboundAdapter
EnsLib.IWay.OutboundAdapter EnsLib.TCP.CountedOutboundAdapter OutboundAdapter
EnsLib.JMS.InboundAdapter Ens.InboundAdapter,EnsLib.JMS.Common InboundAdapter
EnsLib.JMS.OutboundAdapter Ens.OutboundAdapter,EnsLib.JMS.Common OutboundAdapter
EnsLib.JavaGateway.InboundAdapter Ens.InboundAdapter,EnsLib.JavaGateway.Common InboundAdapter
EnsLib.JavaGateway.OutboundAdapter Ens.OutboundAdapter,EnsLib.JavaGateway.Common OutboundAdapter
EnsLib.LDAP.Adapter.Outbound Ens.OutboundAdapter,EnsLib.LDAP.Adapter.Common OutboundAdapter
EnsLib.LDAP.OutboundAdapter Ens.OutboundAdapter OutboundAdapter
EnsLib.MFT.Adapter.Inbound Ens.InboundAdapter,EnsLib.MFT.Adapter.Common InboundAdapter
EnsLib.MFT.Adapter.Outbound Ens.OutboundAdapter,EnsLib.MFT.Adapter.Common OutboundAdapter
EnsLib.MQSeries.InboundAdapter Ens.InboundAdapter,EnsLib.MQSeries.CommonAdapter InboundAdapter
EnsLib.MQSeries.OutboundAdapter Ens.OutboundAdapter,EnsLib.MQSeries.CommonAdapter OutboundAdapter
EnsLib.MQTT.Adapter.Inbound Ens.InboundAdapter,EnsLib.MQTT.Adapter.Common InboundAdapter
EnsLib.MQTT.Adapter.Outbound Ens.OutboundAdapter,EnsLib.MQTT.Adapter.Common OutboundAdapter
EnsLib.PEX.InboundAdapter Ens.InboundAdapter,EnsLib.PEX.Common InboundAdapter
EnsLib.PEX.OutboundAdapter Ens.OutboundAdapter,EnsLib.PEX.Common OutboundAdapter
EnsLib.Pipe.InboundAdapter Ens.InboundAdapter,Ens.Util.Pipe InboundAdapter
EnsLib.Pipe.OutboundAdapter Ens.OutboundAdapter,Ens.Util.Pipe OutboundAdapter
EnsLib.SAP.OutboundAdapter EnsLib.IWay.OutboundAdapter OutboundAdapter
EnsLib.SOAP.CST.OutboundAdapter EnsLib.TCP.OutboundAdapter,EnsLib.SOAP.CST.Common OutboundAdapter
EnsLib.SOAP.InboundAdapter EnsLib.TCP.InboundAdapter InboundAdapter
EnsLib.SOAP.OutboundAdapter Ens.OutboundAdapter OutboundAdapter
EnsLib.SQL.InboundAdapter Ens.InboundAdapter,EnsLib.SQL.Common InboundAdapter
EnsLib.SQL.OutboundAdapter Ens.OutboundAdapter,EnsLib.SQL.Common OutboundAdapter
EnsLib.Siebel.HTTPOutboundAdapter EnsLib.HTTP.OutboundAdapter OutboundAdapter
EnsLib.TCP.CountedInboundAdapter EnsLib.TCP.InboundAdapter,EnsLib.TCP.CountedCommon InboundAdapter
EnsLib.TCP.CountedOutboundAdapter EnsLib.TCP.OutboundAdapter,EnsLib.TCP.CountedCommon OutboundAdapter
EnsLib.TCP.CountedXMLInboundAdapter EnsLib.TCP.InboundAdapter,EnsLib.TCP.CountedCommon,Ens.Util.XML.Reader InboundAdapter
EnsLib.TCP.CountedXMLOutboundAdapter EnsLib.TCP.CountedOutboundAdapter,Ens.Util.XML.Reader OutboundAdapter
EnsLib.TCP.DuplexAdapter Ens.InboundAdapter,Ens.OutboundAdapter InboundAdapter
EnsLib.TCP.FramedInboundAdapter EnsLib.TCP.InboundAdapter,EnsLib.TCP.FramedCommon,EnsLib.TCP.TextLineCommon InboundAdapter
EnsLib.TCP.FramedOutboundAdapter EnsLib.TCP.OutboundAdapter,EnsLib.TCP.TextLineCommon,EnsLib.TCP.FramedCommon OutboundAdapter
EnsLib.TCP.InboundAdapter Ens.InboundAdapter,EnsLib.TCP.Common InboundAdapter
EnsLib.TCP.OutboundAdapter Ens.OutboundAdapter,EnsLib.TCP.Common OutboundAdapter
EnsLib.TCP.TextLineInboundAdapter EnsLib.TCP.InboundAdapter,EnsLib.TCP.TextLineCommon InboundAdapter
EnsLib.TCP.TextLineOutboundAdapter EnsLib.TCP.OutboundAdapter,EnsLib.TCP.TextLineCommon OutboundAdapter
EnsLib.TN3270.OutboundAdapter EnsLib.IWay.IBO.OutboundAdapter OutboundAdapter
EnsLib.Telnet.OutboundAdapter Ens.OutboundAdapter OutboundAdapter
EnsLib.UDP.InboundAdapter Ens.InboundAdapter,EnsLib.UDP.Common InboundAdapter
EnsLib.UDP.OutboundAdapter Ens.OutboundAdapter,EnsLib.UDP.Common OutboundAdapter