CustTable custTable;
;
try
{
custTable.AccountNum ="0002";
custTable.custGroup ="20";
custTable.Name ="Demonstration of try catch";
if (!custTable.validateWrite())
{
throw error("Record failed validation");
}
custTable.insert();
info("Record was inserted in database");
}
catch (Exception::error)
{
error("There was an error while inserting the
record.");
}
_________________________________________________________________________________
CustTable custTable;
;
try
{
custTable.AccountNum =“0001”;
custTable.custGroup =“50”;
custTable.Name =“Example of try catch”;
custTable.insert();
}
catch (Exception::error)
{
error(“There was an error while inserting the
record.”);
}
catch (Exception::deadlock)
{
retry;
}
_________________________________________________________________________________
//Throw Statement
try
{
select custTable
where custTable.accountNum == '1019';
if (!custTable.RecId)
throw error("Customer does not exist");
}
catch (exception::error)
{
error ("Process was aborted");
}
Monday, October 29, 2012
Wednesday, July 8, 2009
Who Modified my Object
Who Modified My Object
static void WhoModifiedInventTableForm(args a)
{
UtilIdElements UE;
while select UE
where (UE.utilLevel == UtilEntryLevel::USR && UE.recordType == UtilElementType::Form && UE.name == "InventTable")
{
print UE.modifiedBy + " " + date2str(UE.modifiedDate,123,2,2,2,2,2);
pause;
}
}
static void WhoModifiedInventTableForm(args a)
{
UtilIdElements UE;
while select UE
where (UE.utilLevel == UtilEntryLevel::USR && UE.recordType == UtilElementType::Form && UE.name == "InventTable")
{
print UE.modifiedBy + " " + date2str(UE.modifiedDate,123,2,2,2,2,2);
pause;
}
}
Sunday, January 11, 2009
Check Security Key via X++
securityKeys = new SecurityKeySet();
securityKeys.loadUserRights(curuserid());
fullAccess = securityKeys.access(securitykeynum("xxxxxxxxxxxxxxx")) ==
AccessType::Delete;
securityKeys.loadUserRights(curuserid());
fullAccess = securityKeys.access(securitykeynum("xxxxxxxxxxxxxxx")) ==
AccessType::Delete;
Wednesday, December 10, 2008
Download file from URL
static void JobDownloadFromURL(Args _args)
{
Url url;
int iHandle;
WinInet winInet;
Filename filename;
TextBuffer textBuffer;
;
winInet = new WinInet();
textBuffer = new TextBuffer();
filename = "c:\\temp\\valuta_dag.sdv";
url =
"http://www.norges-bank.no/webdav/stat/no/valutakurser/valuta_dag.sdv";
iHandle = winInet.internetOpenUrl(url);
if (iHandle == 0)
{
error(strfmt("Error open: %1", url));
return;
}
textBuffer.appendText(winInet.internetReadFile(iHandle));
winInet.internetCloseHandle(iHandle);
textBuffer.toFile(filename);
info(strfmt("Lines: %1", textBuffer.numLines()));
}
{
Url url;
int iHandle;
WinInet winInet;
Filename filename;
TextBuffer textBuffer;
;
winInet = new WinInet();
textBuffer = new TextBuffer();
filename = "c:\\temp\\valuta_dag.sdv";
url =
"http://www.norges-bank.no/webdav/stat/no/valutakurser/valuta_dag.sdv";
iHandle = winInet.internetOpenUrl(url);
if (iHandle == 0)
{
error(strfmt("Error open: %1", url));
return;
}
textBuffer.appendText(winInet.internetReadFile(iHandle));
winInet.internetCloseHandle(iHandle);
textBuffer.toFile(filename);
info(strfmt("Lines: %1", textBuffer.numLines()));
}
Thursday, May 15, 2008
Spell checking from AX
The AX class SysSpellChecker is a wrapper for the spellchecker of Word. Using this class you can offer spellchecking from AX.
Here is some sample code, checking text from a form string control:
SysSpellChecker spellChecker = SysSpellChecker::newCurrentLanguage();
TextBuffer textBuffer = new TextBuffer();
int wordStart;
int startSeparator;
int endSeparator;
str wordToCheck;
List spellingSuggestions;
ListEnumerator listEnumerator;
;
super();
startLengthyOperation();
setPrefix("Spell check");
textBuffer.setText(stringEdit.text());
startSeparator = 1;
while (startSeparator)
{
wordStart = textBuffer.find('[^ \n\t\\<\\>\\!\\\'\\\\\\#\\¤\\%\\&\\/\\(\\)\\=\\?\\,\\.\\:\\;\\*\\}\\{\\]', startSeparator) ? textBuffer.matchPos():0;
if (!wordStart)
break;
endSeparator = textBuffer.find('[ \n\t\\<\\>\\!\\\'\\\\\\#\\¤\\%\\&\\/\\(\\)\\=\\?\\,\\.\\:\\;\\*\\}\\{\\]', wordStart)? textBuffer.matchPos():0;
wordToCheck = textBuffer.subStr(wordStart, (endseparator ? endseparator : textBuffer.size()+1) - wordStart);
if (spellChecker.checkSpelling(wordToCheck) == false)
{
warning (strfmt("@SYS84009", wordToCheck));
spellingSuggestions = spellChecker.getSpellingSuggestions(wordToCheck);
listEnumerator = spellingSuggestions.getEnumerator();
while (listEnumerator.moveNext())
{
info (strFmt("Suggestion: %1", listEnumerator.current()));
}
}
startSeparator = endSeparator;
}
spellChecker.finalize();
info ("Spell check done");
endLengthyOperation();
Unfortunately there is a bug in the checkSpelling method of the COM object from Word, so it will always use the default language of your Office setup as the language to check your text against. So you can't spellcheck for other languages than your default language of Office. You can change the default language from the Office Tools however.
Here is some sample code, checking text from a form string control:
SysSpellChecker spellChecker = SysSpellChecker::newCurrentLanguage();
TextBuffer textBuffer = new TextBuffer();
int wordStart;
int startSeparator;
int endSeparator;
str wordToCheck;
List spellingSuggestions;
ListEnumerator listEnumerator;
;
super();
startLengthyOperation();
setPrefix("Spell check");
textBuffer.setText(stringEdit.text());
startSeparator = 1;
while (startSeparator)
{
wordStart = textBuffer.find('[^ \n\t\\<\\>\\!\\\'\\\\\\#\\¤\\%\\&\\/\\(\\)\\=\\?\\,\\.\\:\\;\\*\\}\\{\\]', startSeparator) ? textBuffer.matchPos():0;
if (!wordStart)
break;
endSeparator = textBuffer.find('[ \n\t\\<\\>\\!\\\'\\\\\\#\\¤\\%\\&\\/\\(\\)\\=\\?\\,\\.\\:\\;\\*\\}\\{\\]', wordStart)? textBuffer.matchPos():0;
wordToCheck = textBuffer.subStr(wordStart, (endseparator ? endseparator : textBuffer.size()+1) - wordStart);
if (spellChecker.checkSpelling(wordToCheck) == false)
{
warning (strfmt("@SYS84009", wordToCheck));
spellingSuggestions = spellChecker.getSpellingSuggestions(wordToCheck);
listEnumerator = spellingSuggestions.getEnumerator();
while (listEnumerator.moveNext())
{
info (strFmt("Suggestion: %1", listEnumerator.current()));
}
}
startSeparator = endSeparator;
}
spellChecker.finalize();
info ("Spell check done");
endLengthyOperation();
Unfortunately there is a bug in the checkSpelling method of the COM object from Word, so it will always use the default language of your Office setup as the language to check your text against. So you can't spellcheck for other languages than your default language of Office. You can change the default language from the Office Tools however.
Monday, January 21, 2008
How to get the PC Name and IP
static void JobGetServerInfo(Args _args)
{
xSession curXS;
int i;
str GetIP(str Hostname)
{
DLL DLL = new DLL("ws2_32.dll");
DLL DLL2 = new DLL("kernel32");
DLLFunction CopyMemory = new DLLFunction(Dll2, "RtlMoveMemory");
DLLFunction HostInfo = new DLLFunction(DLL, "gethostbyname");
binary Dest = new binary(100);
int Host;
str IP;
HostInfo.arg(ExtTypes::String);
HostInfo.returns(ExtTypes::DWord);
Host = HostInfo.call(Hostname);
CopyMemory.arg(ExtTypes::Pointer,
ExtTypes::DWord,
ExtTypes::DWord);
if(Host)
{
CopyMemory.call(Dest, Host, 16);
if(Dest.dWord(12))
{
CopyMemory.call(Dest, Dest.dWord(12), 4);
if(Dest.dWord(0))
{
CopyMemory.call(Dest, Dest.dWord(0), 4);
IP = int2str(Dest.byte(0)) + "." +
int2str(Dest.byte(1)) + "." +
int2str(Dest.byte(2)) + "." +
int2str(Dest.byte(3));
}
}
}
return IP;
}
;
for(i = 1; i <= Info::licensedUsersTotal(); i++)
{
curXS = new xSession(i, true);
if(curXS && curXS.sessionId() &&
curXS.clientKind() == ClientType::Client && curXS.userId())
{
info( "PC Name:"+curXS.clientComputerName() + ", IP:"+getIP( curXS.clientComputerName())); //pause;
}
}
}
{
xSession curXS;
int i;
str GetIP(str Hostname)
{
DLL DLL = new DLL("ws2_32.dll");
DLL DLL2 = new DLL("kernel32");
DLLFunction CopyMemory = new DLLFunction(Dll2, "RtlMoveMemory");
DLLFunction HostInfo = new DLLFunction(DLL, "gethostbyname");
binary Dest = new binary(100);
int Host;
str IP;
HostInfo.arg(ExtTypes::String);
HostInfo.returns(ExtTypes::DWord);
Host = HostInfo.call(Hostname);
CopyMemory.arg(ExtTypes::Pointer,
ExtTypes::DWord,
ExtTypes::DWord);
if(Host)
{
CopyMemory.call(Dest, Host, 16);
if(Dest.dWord(12))
{
CopyMemory.call(Dest, Dest.dWord(12), 4);
if(Dest.dWord(0))
{
CopyMemory.call(Dest, Dest.dWord(0), 4);
IP = int2str(Dest.byte(0)) + "." +
int2str(Dest.byte(1)) + "." +
int2str(Dest.byte(2)) + "." +
int2str(Dest.byte(3));
}
}
}
return IP;
}
;
for(i = 1; i <= Info::licensedUsersTotal(); i++)
{
curXS = new xSession(i, true);
if(curXS && curXS.sessionId() &&
curXS.clientKind() == ClientType::Client && curXS.userId())
{
info( "PC Name:"+curXS.clientComputerName() + ", IP:"+getIP( curXS.clientComputerName())); //pause;
}
}
}
Tuesday, September 18, 2007
How to Run Time Add Code to AOT
static str 60 addValidateCode(FormName formname, TableId refTableId, FieldId
refFieldId)
{
#AOT
TreeNode treeNode;
TreeNode methodsTreeNode;
str oldsource;
str newsource;
str superString = "super()";
str busRuleString;
str newMethodName;
str newMethodCode;
;
treeNode = TreeNode::findNode(#FormsPath + "\\" + formName);
treeNode = treeNode.AOTfindChild("Data Sources");
treeNode = treeNode.AOTfindChild(tableId2Name(refTableId));
if(refFieldId)
{
newMethodName = "validate";
newMethodCode = "public boolean validate()\n{\n boolean ret;\n
;\n ret = super() && PABusInessRules::CheckRules(element, this," +
strfmt(' %1',refFieldId) + ");\n\n return ret;\n}\n";
//bus rule string is different if applied to a fieldId
busRuleString = "super() && PABusInessRules::CheckRules(element,
this," + strfmt(' %1)',refFieldId);
treeNode = treeNode.AOTfindChild("fields");
treeNode = treeNode.AOTfindChild(fieldId2Name(refTableId,RefFieldId));
}
else
{
newMethodName = "validateWrite";
newMethodCode = "public boolean validateWrite()\n{\n boolean
ret;\n ;\n ret = super() && PABusInessRules::CheckRules(element,
this);\n\n return ret;\n}\n";
busRuleString = "super() && PABusinessRules::CheckRules(element,
this)";
}
methodsTreeNode = treeNode.AOTfindChild("Methods");
treeNode = methodsTreeNode.AOTfindChild(newMethodName);
if(!treeNode)
{
methodsTreeNode.AOTadd(newMethodName);
methodsTreeNode.AOTsave();
treeNode = methodsTreeNode.AOTfindChild(newMethodName);
newSource = newMethodCode;
treeNode.AOTsetSource(newsource,false);
}
else
{
oldsource = treeNode.AOTgetSource();
// check if rule already applied
if(strscan(oldSource,busRuleString,1,strlen(oldSource)) == 0)
{
newSource = strReplace(oldsource,superString,busRuleString);
//new line to be inserted
treeNode.AOTsetSource(newsource);
}
}
TreeNode = TreeNode::findNode(#FormsPath + "\\" + formName);
treeNode.AOTcompile();
treeNode.AOTsave();
return busRuleString;
}
refFieldId)
{
#AOT
TreeNode treeNode;
TreeNode methodsTreeNode;
str oldsource;
str newsource;
str superString = "super()";
str busRuleString;
str newMethodName;
str newMethodCode;
;
treeNode = TreeNode::findNode(#FormsPath + "\\" + formName);
treeNode = treeNode.AOTfindChild("Data Sources");
treeNode = treeNode.AOTfindChild(tableId2Name(refTableId));
if(refFieldId)
{
newMethodName = "validate";
newMethodCode = "public boolean validate()\n{\n boolean ret;\n
;\n ret = super() && PABusInessRules::CheckRules(element, this," +
strfmt(' %1',refFieldId) + ");\n\n return ret;\n}\n";
//bus rule string is different if applied to a fieldId
busRuleString = "super() && PABusInessRules::CheckRules(element,
this," + strfmt(' %1)',refFieldId);
treeNode = treeNode.AOTfindChild("fields");
treeNode = treeNode.AOTfindChild(fieldId2Name(refTableId,RefFieldId));
}
else
{
newMethodName = "validateWrite";
newMethodCode = "public boolean validateWrite()\n{\n boolean
ret;\n ;\n ret = super() && PABusInessRules::CheckRules(element,
this);\n\n return ret;\n}\n";
busRuleString = "super() && PABusinessRules::CheckRules(element,
this)";
}
methodsTreeNode = treeNode.AOTfindChild("Methods");
treeNode = methodsTreeNode.AOTfindChild(newMethodName);
if(!treeNode)
{
methodsTreeNode.AOTadd(newMethodName);
methodsTreeNode.AOTsave();
treeNode = methodsTreeNode.AOTfindChild(newMethodName);
newSource = newMethodCode;
treeNode.AOTsetSource(newsource,false);
}
else
{
oldsource = treeNode.AOTgetSource();
// check if rule already applied
if(strscan(oldSource,busRuleString,1,strlen(oldSource)) == 0)
{
newSource = strReplace(oldsource,superString,busRuleString);
//new line to be inserted
treeNode.AOTsetSource(newsource);
}
}
TreeNode = TreeNode::findNode(#FormsPath + "\\" + formName);
treeNode.AOTcompile();
treeNode.AOTsave();
return busRuleString;
}
Subscribe to:
Posts (Atom)