Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Dynamics 365 Community / Blogs / Dynamics NAVAX / Online (Bing) translator fo...

Online (Bing) translator for AX using a shortcut key

Munib Profile Picture Munib 2,500
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.
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.

This was originally posted here.

Comments

*This post is locked for comments