Axapta Dynamics 365财务和运营SalesOrderLineEntity验证扩展
我对x++开发还是相当陌生的。我正在尝试向SalesOrderLineEntity添加一些验证,以阻止用户导入不能被多个数量整除的数量 这就是我所取得的成绩,我无法训练如何用x++编写(如果订购数量不能被多个数量整除(即不是整数)),然后抛出一个错误Axapta Dynamics 365财务和运营SalesOrderLineEntity验证扩展,axapta,x++,dynamics-365-operations,Axapta,X++,Dynamics 365 Operations,我对x++开发还是相当陌生的。我正在尝试向SalesOrderLineEntity添加一些验证,以阻止用户导入不能被多个数量整除的数量 这就是我所取得的成绩,我无法训练如何用x++编写(如果订购数量不能被多个数量整除(即不是整数)),然后抛出一个错误 [ExtensionOf(tableStr(SalesOrderLineEntity))] final class SalesOrderLineEntity_Extension { boolean validateWrite() { InventI
[ExtensionOf(tableStr(SalesOrderLineEntity))]
final class SalesOrderLineEntity_Extension
{
boolean validateWrite()
{
InventItemSalesSetup inventItemSalesSetup;
SalesLine salesLine;
SalesTable salesTable = SalesTable::find(this.SalesOrderNumber);
select firstonly * from salesLine where salesLine.salesid == salesTable.SalesId
join inventItemSalesSetup where inventItemSalesSetup.ItemId == salesLine.ItemId;
if (this.RecId)
{
if (salesLine.QtyOrdered < inventItemSalesSetup.MultipleQty)
{
return checkFailed
("qty ordered less than multiple qty");
}
if (isInteger(salesLine.QtyOrdered / inventItemSalesSetup.MultipleQty))
{
return checkFailed
("qty ordered not divisible by multiple qty");
}
}
next validateWrite();
if (!salesTable.checkUpdate(true, true, true))
{
return false;
}
boolean ret;
//ret = super();
return ret;
}
}
[ExtensionOf(tableStr(SalesOrderLineEntity))]
最终类SalesOrderLineEntity\u扩展
{
布尔validateWrite()
{
发明销售设置发明销售设置;
销售线销售线;
SalesTable SalesTable=SalesTable::find(this.SalesOrderNumber);
从salesLine中选择firstonly*,其中salesLine.salesid==salesTable.salesid
加入CreativemSalesSetup,其中CreativemSalesSetup.ItemId==salesLine.ItemId;
if(this.RecId)
{
if(salesLine.QtyOrdered
如果使用整数,则需要在AX中使用模运算(mod
)。确保检查您没有被零除(世界可能结束),并且您可能希望检查是否实际输入了非零数量
if(salesLine.QtyOrdered && inventItemSalesSetup.MultipleQty && (salesLine.QtyOrdered mod inventItemSalesSetup.MultipleQty != 0)
{
return checkFailed("qty ordered not divisible by multiple qty");
}
如果您使用的是reals,那么您需要做一些基本的整数运算
real qtyOrdered;
real multipleQty;
int result;
qtyOrdered = 321.0; // 321 / 10.7 = 30 exactly
multipleQty = 10.7;
result = qtyOrdered / multipleQty; // This will store the integer and drop any decimals
// If the result multipled by the original multiple is equal to the original value, then you're good
if (result * multipleQty == qtyOrdered)
{
info("All good!");
}
else
{
info("Bad!");
}
可能有一个标准的AX函数可以满足您的需要,但它太基本了,我只需要自己计算。如果您使用的是整数,则需要在AX中使用模运算(
mod
)。确保检查您没有被零除(世界可能结束),并且您可能希望检查是否实际输入了非零数量
if(salesLine.QtyOrdered && inventItemSalesSetup.MultipleQty && (salesLine.QtyOrdered mod inventItemSalesSetup.MultipleQty != 0)
{
return checkFailed("qty ordered not divisible by multiple qty");
}
如果您使用的是reals,那么您需要做一些基本的整数运算
real qtyOrdered;
real multipleQty;
int result;
qtyOrdered = 321.0; // 321 / 10.7 = 30 exactly
multipleQty = 10.7;
result = qtyOrdered / multipleQty; // This will store the integer and drop any decimals
// If the result multipled by the original multiple is equal to the original value, then you're good
if (result * multipleQty == qtyOrdered)
{
info("All good!");
}
else
{
info("Bad!");
}
可能有一个标准的AX函数可以满足您的需要,但它太基本了,我只需要自己做计算。请查看完成的代码,我相信这正是我想要的。谢谢你的帮助。如对此有任何建议/效率/改进,将不胜感激
[ExtensionOf(dataentityviewstr(SalesOrderLineEntity))]
final class SalesOrderLineEntity_Extension
{
boolean validateWrite()
{
InventItemSalesSetup inventItemSalesSetup;
SalesLine salesLine;
select firstonly * from salesLine where salesLine.Salesid == this.SalesOrderNumber
&& salesLine.ItemId == this.ItemNumber
join inventItemSalesSetup where inventItemSalesSetup.ItemId == this.ItemNumber;
boolean ret = next validateWrite();
if (ret)
{
if (ret && this.OrderedSalesQuantity < inventItemSalesSetup.MultipleQty)
{
ret = checkFailed ("qty ordered less than multiple qty");
}
if (ret && this.OrderedSalesQuantity mod inventItemSalesSetup.MultipleQty != 0)
{
ret = checkFailed ("qty ordered not divisible by multiple qty");
}
}
return ret;
}
[扩展(dataentityviewstr(SalesOrderLineEntity))]
最终类SalesOrderLineEntity\u扩展
{
布尔validateWrite()
{
发明销售设置发明销售设置;
销售线销售线;
从salesLine中选择firstonly*,其中salesLine.Salesid==this.SalesOrderNumber
&&salesLine.ItemId==此.ItemNumber
加入CreativemSalesSetup,其中CreativemSalesSetup.ItemId==this.ItemNumber;
布尔ret=下一个validateWrite();
如果(ret)
{
if(ret&&this.OrderedSalesQuantity
}请查看完成的代码,我相信这正是我想要的。谢谢你的帮助。如对此有任何建议/效率/改进,将不胜感激
[ExtensionOf(dataentityviewstr(SalesOrderLineEntity))]
final class SalesOrderLineEntity_Extension
{
boolean validateWrite()
{
InventItemSalesSetup inventItemSalesSetup;
SalesLine salesLine;
select firstonly * from salesLine where salesLine.Salesid == this.SalesOrderNumber
&& salesLine.ItemId == this.ItemNumber
join inventItemSalesSetup where inventItemSalesSetup.ItemId == this.ItemNumber;
boolean ret = next validateWrite();
if (ret)
{
if (ret && this.OrderedSalesQuantity < inventItemSalesSetup.MultipleQty)
{
ret = checkFailed ("qty ordered less than multiple qty");
}
if (ret && this.OrderedSalesQuantity mod inventItemSalesSetup.MultipleQty != 0)
{
ret = checkFailed ("qty ordered not divisible by multiple qty");
}
}
return ret;
}
[扩展(dataentityviewstr(SalesOrderLineEntity))]
最终类SalesOrderLineEntity\u扩展
{
布尔validateWrite()
{
发明销售设置发明销售设置;
销售线销售线;
从salesLine中选择firstonly*,其中salesLine.Salesid==this.SalesOrderNumber
&&salesLine.ItemId==此.ItemNumber
加入CreativemSalesSetup,其中CreativemSalesSetup.ItemId==this.ItemNumber;
布尔ret=下一个validateWrite();
如果(ret)
{
if(ret&&this.OrderedSalesQuantity
}