Sending Fax from AX is common requirement.
This can be achieved in following way
Use the Com class wrapper wizard and load the Microsoft Fax Service
MFSFaxDocument MFSFaxDocument ;
;
MFSFaxDocument = new MFSFaxDocument();
MFSFaxDocument .Body('C:\\Matrish.txt');
MFSFaxDocument .Recipients().Add('Faxno','Receiver Name');
MFSFaxDocument .Subject('Test Fax');
MFSFaxDocument .Sender().Name('Sender Name');
MFSFaxDocument .Submit('ServerName');
Friday, May 14, 2010
Adding Find\Filter functionality on Display method
Adding Find\Filter functionality on Display method
Override Context method of Form control which is using display method and provide code for filter. E.g I have done below for PhysicalInvent field of InventOnHandItem form.
void context()
{
int selectedMenu;
real test;
formrun fr;
Args ag;
Itemname strtext;
querybuilddataSource qb1;
queryrun qr;
query q;
PopupMenu menu = new PopupMenu(element.hWnd());
int a = menu.insertItem('Find');
int b = menu.insertItem('Filter');
int c = menu.insertItem('Remove Filter');
selectedMenu = menu.draw();
switch (selectedMenu)
{
case -1:
break;
case a:
ag = new args('SysformSearch');
fr = new formrun(ag);
fr.run();
fr.wait();
strtext = fr.design().controlName('FindEdit').valueStr();
if(strtext)
{
q = inventSum_Ds.query();
qb1 =q.dataSourceTable(tablenum(InventSum));
QB1.addRange(FieldNum(InventSum,PhysicalInvent)).value(SySQuery::value(strtext));
INVENTSUM_DS.query(Q);
INVENTSUM_ds.executeQuery();
}
break;
case b:
InventSum_DS.filter(FieldNum(InventSum,PhysicalInvent),Sysquery::value(InventSum.PhysicalInvent()));
break;
case c :
InventSum_DS.removeFilter();
break;
Default:
break;
}
}
Override Context method of Form control which is using display method and provide code for filter. E.g I have done below for PhysicalInvent field of InventOnHandItem form.
void context()
{
int selectedMenu;
real test;
formrun fr;
Args ag;
Itemname strtext;
querybuilddataSource qb1;
queryrun qr;
query q;
PopupMenu menu = new PopupMenu(element.hWnd());
int a = menu.insertItem('Find');
int b = menu.insertItem('Filter');
int c = menu.insertItem('Remove Filter');
selectedMenu = menu.draw();
switch (selectedMenu)
{
case -1:
break;
case a:
ag = new args('SysformSearch');
fr = new formrun(ag);
fr.run();
fr.wait();
strtext = fr.design().controlName('FindEdit').valueStr();
if(strtext)
{
q = inventSum_Ds.query();
qb1 =q.dataSourceTable(tablenum(InventSum));
QB1.addRange(FieldNum(InventSum,PhysicalInvent)).value(SySQuery::value(strtext));
INVENTSUM_DS.query(Q);
INVENTSUM_ds.executeQuery();
}
break;
case b:
InventSum_DS.filter(FieldNum(InventSum,PhysicalInvent),Sysquery::value(InventSum.PhysicalInvent()));
break;
case c :
InventSum_DS.removeFilter();
break;
Default:
break;
}
}
Prevent a form from closing
Override canClose method of that form, and call winAPI::minimizeWindow, when
the form cannot be closed.
This is the sample code, but require new checkBox control (named
"okToClose") with "autoDeclare" property is "Yes":
public boolean canClose()
{
boolean ret;
ret = super();
if (okToClose.value() == NoYes::Yes)
{
ret = true;
}
else
{
ret = false;
WinAPI::minimizeWindow(element.hWnd());
}
return ret;
}
the form cannot be closed.
This is the sample code, but require new checkBox control (named
"okToClose") with "autoDeclare" property is "Yes":
public boolean canClose()
{
boolean ret;
ret = super();
if (okToClose.value() == NoYes::Yes)
{
ret = true;
}
else
{
ret = false;
WinAPI::minimizeWindow(element.hWnd());
}
return ret;
}
Reserving inventory by code
Reserving inventory by code
static void ReserveQty(Args _args)
{
SalesLine SalesLine = SalesLine::findRecId(35522);
InventDim InventDim = SalesLine.inventDim();
InventUpd_Reservation reservation;
;
reservation = InventUpd_Reservation::newMovement(InventMovement::construct(SalesLine,true,inventDim),-5,true);
reservation.updateNow();
}
static void ReserveQty(Args _args)
{
SalesLine SalesLine = SalesLine::findRecId(35522);
InventDim InventDim = SalesLine.inventDim();
InventUpd_Reservation reservation;
;
reservation = InventUpd_Reservation::newMovement(InventMovement::construct(SalesLine,true,inventDim),-5,true);
reservation.updateNow();
}
Code to add EDT of through X++ code
static void Job19(Args _args)
{
UtilIdElements uie;
XInfo XInfo = new XInfo();
TreeNode TNode;
TreeNode DNode;
str Props =
"PROPERTIES\n" +
" Name #AXUStr35\n" +
" Label #\n" +
" HelpText #\n" +
" FormHelp #\n" +
" ArrayLength #1\n" +
" DisplayLength #Auto\n" +
" ConfigurationKey #\n" +
" ButtonImage #Arrow\n" +
" Extends #\n" +
" DisplayHeight #Auto\n" +
" StringSize #35\n" +
" Adjustment #Left\n" +
" Alignment #Auto\n" +
" ChangeCase #Auto\n" +
"ENDPROPERTIES\n";
select maxof(id) from uie where uie.recordType ==
UtilElementType::ExtendedType && uie.utilLevel == XInfo.currentAOLayer();
uie.id++;
uie.utilLevel = XInfo.currentAOLayer();
uie.recordType = UtilElementType::ExtendedType;
uie.name = "AXUStr35";
uie.insert();
DNode = TreeNode::findNode("Data Dictionary\\Extended Data Types");
DNode.AOTrefresh();
TNode = TreeNode::findNode("Data Dictionary\\Extended Data Types\\AXUStr35");
TNode.sysUtilDelete();
TNode.AOTsetProperties(Props);
TNode.AOTsave();
// pause;
}
{
UtilIdElements uie;
XInfo XInfo = new XInfo();
TreeNode TNode;
TreeNode DNode;
str Props =
"PROPERTIES\n" +
" Name #AXUStr35\n" +
" Label #\n" +
" HelpText #\n" +
" FormHelp #\n" +
" ArrayLength #1\n" +
" DisplayLength #Auto\n" +
" ConfigurationKey #\n" +
" ButtonImage #Arrow\n" +
" Extends #\n" +
" DisplayHeight #Auto\n" +
" StringSize #35\n" +
" Adjustment #Left\n" +
" Alignment #Auto\n" +
" ChangeCase #Auto\n" +
"ENDPROPERTIES\n";
select maxof(id) from uie where uie.recordType ==
UtilElementType::ExtendedType && uie.utilLevel == XInfo.currentAOLayer();
uie.id++;
uie.utilLevel = XInfo.currentAOLayer();
uie.recordType = UtilElementType::ExtendedType;
uie.name = "AXUStr35";
uie.insert();
DNode = TreeNode::findNode("Data Dictionary\\Extended Data Types");
DNode.AOTrefresh();
TNode = TreeNode::findNode("Data Dictionary\\Extended Data Types\\AXUStr35");
TNode.sysUtilDelete();
TNode.AOTsetProperties(Props);
TNode.AOTsave();
// pause;
}
Code to add EDT of through X++ code
static void Job19(Args _args)
{
UtilIdElements uie;
XInfo XInfo = new XInfo();
TreeNode TNode;
TreeNode DNode;
str Props =
"PROPERTIES\n" +
" Name #AXUStr35\n" +
" Label #\n" +
" HelpText #\n" +
" FormHelp #\n" +
" ArrayLength #1\n" +
" DisplayLength #Auto\n" +
" ConfigurationKey #\n" +
" ButtonImage #Arrow\n" +
" Extends #\n" +
" DisplayHeight #Auto\n" +
" StringSize #35\n" +
" Adjustment #Left\n" +
" Alignment #Auto\n" +
" ChangeCase #Auto\n" +
"ENDPROPERTIES\n";
select maxof(id) from uie where uie.recordType ==
UtilElementType::ExtendedType && uie.utilLevel == XInfo.currentAOLayer();
uie.id++;
uie.utilLevel = XInfo.currentAOLayer();
uie.recordType = UtilElementType::ExtendedType;
uie.name = "AXUStr35";
uie.insert();
DNode = TreeNode::findNode("Data Dictionary\\Extended Data Types");
DNode.AOTrefresh();
TNode = TreeNode::findNode("Data Dictionary\\Extended Data Types\\AXUStr35");
TNode.sysUtilDelete();
TNode.AOTsetProperties(Props);
TNode.AOTsave();
// pause;
}
{
UtilIdElements uie;
XInfo XInfo = new XInfo();
TreeNode TNode;
TreeNode DNode;
str Props =
"PROPERTIES\n" +
" Name #AXUStr35\n" +
" Label #\n" +
" HelpText #\n" +
" FormHelp #\n" +
" ArrayLength #1\n" +
" DisplayLength #Auto\n" +
" ConfigurationKey #\n" +
" ButtonImage #Arrow\n" +
" Extends #\n" +
" DisplayHeight #Auto\n" +
" StringSize #35\n" +
" Adjustment #Left\n" +
" Alignment #Auto\n" +
" ChangeCase #Auto\n" +
"ENDPROPERTIES\n";
select maxof(id) from uie where uie.recordType ==
UtilElementType::ExtendedType && uie.utilLevel == XInfo.currentAOLayer();
uie.id++;
uie.utilLevel = XInfo.currentAOLayer();
uie.recordType = UtilElementType::ExtendedType;
uie.name = "AXUStr35";
uie.insert();
DNode = TreeNode::findNode("Data Dictionary\\Extended Data Types");
DNode.AOTrefresh();
TNode = TreeNode::findNode("Data Dictionary\\Extended Data Types\\AXUStr35");
TNode.sysUtilDelete();
TNode.AOTsetProperties(Props);
TNode.AOTsave();
// pause;
}
Code for Displaying Back Ground Colour on the basis of Record
*******This Code is use for DisPlay Back Ground Colour on the basis of
Record
----------------------------------------------------------------------
(1) ##### this is for decaration in foms's ClasssDeclaration
for the perpose of Colour the record.
public class FormRun extends ObjectRun
{
int principal;
int nonPrincipal ;
}
(2)##### this is for the purpose of initializing colour of that perticular
record. this code is written on Forms's Init().
public void init()
{
principal = winapi::RGB2int(192,192,192);
nonPrincipal = winapi::RGB2int(255,255,255);
super();
}
(3)#### this is written on DataSource.
public void displayOption(Common _record, FormRowDisplayOption _options)
{
;
spnSizesEuivalances = _record;
if(spnsizeGroups::findPrincipal(spnSizesEuivalances.SizeGroups).PrincipalGrp)
_options.backColor(principal);
else
_options.backColor(nonPrincipal);
}
Record
----------------------------------------------------------------------
(1) ##### this is for decaration in foms's ClasssDeclaration
for the perpose of Colour the record.
public class FormRun extends ObjectRun
{
int principal;
int nonPrincipal ;
}
(2)##### this is for the purpose of initializing colour of that perticular
record. this code is written on Forms's Init().
public void init()
{
principal = winapi::RGB2int(192,192,192);
nonPrincipal = winapi::RGB2int(255,255,255);
super();
}
(3)#### this is written on DataSource.
public void displayOption(Common _record, FormRowDisplayOption _options)
{
;
spnSizesEuivalances = _record;
if(spnsizeGroups::findPrincipal(spnSizesEuivalances.SizeGroups).PrincipalGrp)
_options.backColor(principal);
else
_options.backColor(nonPrincipal);
}
Subscribe to:
Posts (Atom)