lunedì 22 febbraio 2016

HOWTO: Set translation of label on fly by code

Use this script to set the value and comment of an existing label only if this label not exist in a particolar language. You can use it on fly by code whitout use of developer tool.
In my case i can set more than 200+ labels traduction in a couple of minutes.

void modifyLabel(LabelId _labelId, str _srcLanguage, str _trgLanguace, str _trgString, str _trgComment = '')
    {
        SysLabel      srcLang = new SysLabel(_srcLanguage);
        SysLabel      trgLang = new SysLabel(_trgLanguace);

        ;
        _labelId = "@" + _labelId;
        if (!srcLang.exists(_labelId) || !srcLang.extractString(_labelId))
        {
            warning(strfmt("L'etichetta %1 non esiste nella lingua %2", _labelId, srcLang.languageId()));
            return;
        }

        if (trgLang.exists(_labelId) && trgLang.extractString(_labelId))
        {
            warning(strfmt("L'etichetta %1 esiste già nella lingua %2 con il valore %3", _labelId, trgLang.languageId(), trgLang.extractString(_labelId)));
            return;
        }

        cnt += trgLang.modify(_labelId, _trgString, _trgComment ? _trgComment : srcLang.extractComment(_labelId));
        info(strFmt("Modificata etichetta %1 e impostato il testo %2 in lingua %2", _labelId, _trgString));
    }

This script can semplify the same action but in more than one language, example in my case the traduction of en-us and en-gb is the same.

    void modifyLabelMultipleLanguagese(LabelId _labelId, str _srcLanguage, container _trgLanguaces, str _trgString, str _trgComment = '')
    {
        int i;
        str trgLanguace;
        ;
        for(i=1;i<=conlen(_trgLanguaces);i++)
        {
            trgLanguace = conpeek(_trgLanguaces, i);
            modifyLabel(_labelId, _srcLanguage, trgLanguace, _trgString, _trgComment);
        }
    }

venerdì 12 febbraio 2016

HOWTO: Get error details from INFOLOG by code

You can use this code for getting che last error from INFO LOG.
I tested this code in all situations, using prefix and other conditions, and it works fine.
In the past i found some other scripts to do that, but i some situations does not work.

int i;
container infoLogCon;
container infoLogItem;
Exception infoLogItemExceptionType;
str infoLogItemMessage;
str strInfoLogMessage;
;
try
{
 infologCon = infolog.copy(1, infolog.line());
 for(i = infolog.line() + 1; i > 1; i--)
 {
  infoLogItem = conpeek(infologCon, i);
  infoLogItemExceptionType = conpeek(infoLogItem, 1);
  infoLogItemMessage = conpeek(infoLogItem, 2);
  if (infoLogItemExceptionType == Exception::Error)
  {
   strInfoLogMessage = infoLogItemMessage;
   strInfoLogMessage = strreplace(strInfoLogMessage, '\t', ' - ');
   break;
  }
 }
 if (!strInfoLogMessage)
  strInfoLogMessage = "Errore non definito";
}
catch
{
 strInfoLogMessage = "Errore sconosciuto";
}
strInfoLogMessage = strltrim(strrtrim(strInfoLogMessage));

lunedì 1 febbraio 2016

HOWTO: [AX2009] Update PURCHQTY of a PURCHLINE

Use this script for update the purchase quantity of a purchline

ttsbegin;
_pLine.PurchQty = q;
PurchLine::modifyPurchQty(_pLine, InventDim::find(_pLine.InventDimId), avoidBox);
InventMovement::bufferSetRemainQty(_pLine);
_pLine.update();
ttscommit;

AX 2012: The request was aborted: Could not create SSL/TLS secure channel

The error you're encountering, "The request was aborted: Could not create SSL/TLS secure channel," can occur due to various re...