Keeping in theme with the last post, I will talk about another simple use for web services in AX.
I will use Microsoft (Bing) Translator to automatically translate fields with just a shortcut key (in this example I will take over the Ctrl+Z shortcut).
In \Classes\SysSetupFormRun add a new method. Copy and paste below. Make sure to replace the API ID with your own. Sign up to Microsoft API.
Now the second part is to trap shortcut keys. This is done in the same class \Classes\SysSetupFormRun.
Modify the task() method by adding the following code:
Final result looks like this:
We could be smart and make it parameter driven with the API ID, from/to language. This example is just to illustrate how simple it is to use web services in your project.
I will use Microsoft (Bing) Translator to automatically translate fields with just a shortcut key (in this example I will take over the Ctrl+Z shortcut).
In \Classes\SysSetupFormRun add a new method. Copy and paste below. Make sure to replace the API ID with your own. Sign up to Microsoft API.
Public static server void translate(str _text = "")
{
//ar,bg,zh-CHS,zh-CHT,cs,da,nl,en,et,fi,fr,de,el,ht,he,hu,id,it,ja,ko,lv,lt,no,pl,pt,ro,ru,sk,sl,es,sv,th,tr,uk,vi
//Arabic Bulgarian Chinese Simplified Chinese Traditional Czech Danish Dutch English Estonian Finnish French
//German Greek Haitian Creole Hebrew Hungarian Indonesian Italian Japanese Korean Latvian Lithuanian
//Norwegian Polish Portuguese Romanian Russian Slovak Slovenian Spanish Swedish Thai Turkish Ukrainian Vietnamese
str uri;
str appId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; //Replace with your API ID
str fromLanguage="en", ToLanguage="fr"; //Change the language you want to change from/to
str ret = "";
System.Net.HttpWebRequest httpRequest = null;
System.Net.HttpWebResponse httpResponse = null;
CLRObject clro = null;
System.IO.Stream stream = null;
System.IO.StreamReader streamReader = null;
XmlTextReader xmlTextReader ;
;
uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=" + appId +
"&text=" + _text + "&from=" + fromLanguage + "&to=" + toLanguage;
try
{
new InteropPermission(InteropKind::ClrInterop).assert();
clro = System.Net.WebRequest::Create(uri);
httpRequest = clro;
httpResponse = httpRequest.GetResponse();
stream = httpResponse.GetResponseStream();
streamReader = new System.IO.StreamReader(stream);
ret = streamReader.ReadToEnd();
xmlTextReader = XmlTextReader::newXml(ret, true) ;
while(xmlTextReader.read())
{
switch (xmlTextReader.NodeType())
{
case XmlNodeType::Text: //Display the text in each element.
ret = xmlTextReader.Value();
break;
}
}
CodeAccessPermission::revertAssert();
}
catch(Exception::CLRError)
{
throw error(AifUtil::getClrErrorMessage());
}
info(ret);
}
Now the second part is to trap shortcut keys. This is done in the same class \Classes\SysSetupFormRun.
Modify the task() method by adding the following code:
public int task(int _p1)
{
#task
FormDataSource formDataSource;
int ret;
// >> Translate string
// Munib - 2010-12-28
FormControl fc;
formStringControl fsc;
;
if (_p1 == 769) //Ctrl + Z
{
fc = this.selectedControl();
formDataSource = this.objectSet();
if(fc && formDataSource)
{
fsc = fc;
if(fsc.dataField() && formDataSource.table())
{
if (fsc.valueStr())
{
SysSetupFormRun::ecl_translate(fsc.valueStr());
}
}
}
}
// << Translate string
if (_p1 == #taskFilter)
{
formDataSource = this.objectSet();
if (formDataSource &&
formDataSource.queryRun() &&
formDataSource.queryRun().args() &&
!formDataSource.queryRun().args().caller())
{
formDataSource.queryRun().args().caller(this);
}
}
//info(strfmt("%1=%2",_p1,#taskFilter));
//shift + F3 - 4443
//Shift + Down - 1296
ret = super(_p1);
return ret;
}
Final result looks like this:
We could be smart and make it parameter driven with the API ID, from/to language. This example is just to illustrate how simple it is to use web services in your project.