Участник
|
Dynamics AX Sustained Engineering: Upgrade script ReleaseUpdateDB41_Invent\updateInventItemPrice () fails without LogisticsAdvanced license code
Источник: http://blogs.technet.com/dynamicsaxs...ense-code.aspx
==============
During upgrade from Axapta 3.0 to Dynamics AX 4.0 or AX 2009, upgrade script ReleaseUpdateDB41_Invent\updateInventItemPrice () fails in the absence of LogisticsAdvanced license code. License codes are used to enable configuration keys. Absence of LogisticsAdvanced license codes cause the disabling of the LogisticsAdvanced configuration key, which, in turn, removes the InventDimCombination Table from the database. This results in the upgrade script ReleaseUpdateDB41_Invent\updateInventItemPrice () failing.
The fix is to add a configuration key validation before processing table InventDimCombination, in \Classes\ReleaseUpdateDB41_Invent\updateInventItemPrice ()
public void updateInventItemPrice()
{
CostingVersion costingVersion;
InventItemPrice inventItemPrice;
InventItemPrice inventItemPriceExist;
InventTableModule inventTableModule;
InventDimCombination inventDimCombination;
CostingVersionId costingVersionId = #commonCostingVersionId;
InventDimId inventDimId = InventDim::inventDimIdBlank();
InventTable inventTable;
int rowCount = 0;
SkipAOSValidationPermission skipAOS;
void insertInventItemPrice(
CostingVersionId _costingVersionId,
ModuleInventPurchSales _moduleInventPurchSales,
CostingVersionPriceType _priceType,
ItemCostModel _itemCostModel,
boolean _restrictItemCostModel,
ItemPurchModel _itemPurchModel,
boolean _restrictItemPurchModel,
InventItemCostingType _costingType
)
{
;
insert_recordset inventItemPrice (VersionId, ItemId, Price, PriceUnit, PriceQty, Markup, PriceAllocateMarkup, UnitID, PriceType, ActivationDate, InventDimId, CostingType)
select _costingVersionId, ItemId, Price, PriceUnit, PriceQty, Markup, AllocateMarkup, UnitId, _priceType, PriceDate, inventDimId, _costingType from inventTableModule
where inventTableModule.ModuleType == _moduleInventPurchSales
&& inventTableModule.Price != 0
&& inventTableModule.PriceDate != dateNull()
exists join inventTable
where inventTable.ItemDimCostPrice == NoYes::No
&& inventTable.ItemId == inventTableModule.ItemId
&& (inventTable.CostModel == _itemCostModel || !_restrictItemCostModel)
&& (inventTable.PurchModel == _itemPurchModel || !_restrictItemPurchModel)
notexists join inventItemPriceExist
where inventItemPriceExist.ItemId == inventTableModule.ItemId
&& inventItemPriceExist.InventDimId == InventDim::inventDimIdBlank()
&& inventItemPriceExist.PriceType == _priceType
&& inventItemPriceExist.ActivationDate == inventTableModule.PriceDate;
rowCount += inventItemPrice.RowCount();
}
void insertInventItemPriceDimSalesPurchase(
CostingVersionId _costingVersionId,
ModuleInventPurchSales _moduleInventPurchSales,
CostingVersionPriceType _priceType,
ItemPurchModel _itemPurchModel,
boolean _restrictItemPurchModel,
InventItemCostingType _costingType
)
{
;
insert_recordset inventItemPrice (VersionId, UnitID, ItemId, Price, PriceUnit, PriceQty, Markup, PriceAllocateMarkup, PriceType, ActivationDate, CostingType, InventDimId)
select _costingVersionId, UnitId, ItemId, Price, PriceUnit, PriceQty, Markup, AllocateMarkup, _priceType, PriceDate, _costingType from inventTableModule
where inventTableModule.ModuleType == _moduleInventPurchSales
&& inventTableModule.Price != 0
&& inventTableModule.PriceDate != dateNull()
join InventDimId from inventDimCombination
where inventDimCombination.ItemId == inventTableModule.ItemId
exists join inventTable
where inventTable.ItemDimCostPrice == NoYes::Yes
&& inventTable.ItemId == inventTableModule.ItemId
&& (inventTable.PurchModel == _itemPurchModel || !_restrictItemPurchModel)
notexists join inventItemPriceExist
where inventItemPriceExist.ItemId == inventTableModule.ItemId
&& inventItemPriceExist.InventDimId == inventDimCombination.InventDimId
&& inventItemPriceExist.PriceType == _priceType
&& inventItemPriceExist.ActivationDate == inventTableModule.PriceDate;
rowCount += inventItemPrice.RowCount();
}
void insertInventItemPriceDimCost(
CostingVersionId _costingVersionId,
ItemCostModel _itemCostModel,
InventItemCostingType _costingType
)
{
ModuleInventPurchSales moduleInventPurchSales;
CostingVersionPriceType priceType;
;
moduleInventPurchSales = ModuleInventPurchSales::Invent;
priceType = CostingVersionPriceType::Cost;
insert_recordset inventItemPrice (VersionId, UnitID, ItemId, ActivationDate, CostingType, PriceType, InventDimId, Price, PriceUnit, PriceQty, Markup, PriceAllocateMarkup)
select _costingVersionId, UnitId, ItemId, PriceDate, _costingType, priceType from inventTableModule
where inventTableModule.ModuleType == moduleInventPurchSales
&& inventTableModule.Price != 0
&& inventTableModule.PriceDate != dateNull()
join InventDimId, del_CostPrice, del_PriceUnit, del_PriceQty, del_Markup, del_AllocateMarkup from inventDimCombination
where inventDimCombination.ItemId == inventTableModule.ItemId
exists join inventTable
where inventTable.ItemDimCostPrice == NoYes::Yes
&& inventTable.ItemId == inventTableModule.ItemId
&& (inventTable.CostModel == _itemCostModel)
notexists join inventItemPriceExist
where inventItemPriceExist.ItemId == inventTableModule.ItemId
&& inventItemPriceExist.InventDimId == inventDimCombination.InventDimId
&& inventItemPriceExist.PriceType == priceType
&& inventItemPriceExist.ActivationDate == inventTableModule.PriceDate;
rowCount += inventItemPrice.RowCount();
}
;
this.tableProgress(tablenum(InventItemPrice));
skipAOS = new SkipAOSValidationPermission();
skipAOS.assert();
// BP deviation documented
inventItemPrice.skipAosValidation(true);
inventItemPrice.skipDataMethods(true);
inventItemPrice.skipEvents(true);
ttsbegin;
// creating a common costing version
costingVersion = CostingVersion::find(#commonCostingVersionId, true);
if (!costingVersion)
{
costingVersion.VersionId = #commonCostingVersionId;
costingVersion.Blocked = NoYesCombo::Yes;
costingVersion.BlockActivation = NoYesCombo::Yes;
costingVersion.CostingType = CostingVersionCostingType::Normal;
}
// copy records from InventTableModule to InventItemPrice
// copy cost prices
insertInventItemPrice(#commonCostingVersionId, ModuleInventPurchSales::Invent, CostingVersionPriceType::Cost, NoYes::No, NoYes::Yes, NoYes::No, NoYes::No, InventItemCostingType::Undefined);
insertInventItemPrice('', ModuleInventPurchSales::Invent, CostingVersionPriceType::Cost, NoYes::Yes, NoYes::Yes, NoYes::No, NoYes::No, InventItemCostingType::Last);
// copy purchase prices
insertInventItemPrice(#commonCostingVersionId, ModuleInventPurchSales::Purch, CostingVersionPriceType::Purch, NoYes::No, NoYes::No, NoYes::No, NoYes::Yes, InventItemCostingType::Undefined);
insertInventItemPrice('', ModuleInventPurchSales::Purch, CostingVersionPriceType::Purch, NoYes::No, NoYes::No, NoYes::Yes, NoYes::Yes, InventItemCostingType::Last);
// copy sales prices
insertInventItemPrice(#commonCostingVersionId, ModuleInventPurchSales::Sales, CostingVersionPriceType::Sales, NoYes::No, NoYes::No, NoYes::No, NoYes::No, InventItemCostingType::Undefined);
if(new DictConfigurationKey(new DictTable(tablenum(InventDimCombination)).configurationKeyId()).enabled())
{
// copy records from InventDimCombination to InventItemPrice
// copy cost prices
insertInventItemPriceDimCost(#commonCostingVersionId, NoYes::No, InventItemCostingType::Undefined);
insertInventItemPriceDimCost('', NoYes::Yes, InventItemCostingType::Last);
// copy purcahse prices
insertInventItemPriceDimSalesPurchase(#commonCostingVersionId, ModuleInventPurchSales::Purch, CostingVersionPriceType::Purch, NoYes::No, NoYes::Yes, InventItemCostingType::Undefined);
insertInventItemPriceDimSalesPurchase('', ModuleInventPurchSales::Purch, CostingVersionPriceType::Purch, NoYes::Yes, NoYes::Yes, InventItemCostingType::Last);
// copy sales prices
insertInventItemPriceDimSalesPurchase(#commonCostingVersionId, ModuleInventPurchSales::Sales, CostingVersionPriceType::Sales, NoYes::No, NoYes::No, InventItemCostingType::Undefined);
}
// copy records from InventDimCombination to InventItemPrice
// copy cost prices
insertInventItemPriceDimCost(#commonCostingVersionId, NoYes::No, InventItemCostingType::Undefined);
insertInventItemPriceDimCost('', NoYes::Yes, InventItemCostingType::Last);
// copy purcahse prices
insertInventItemPriceDimSalesPurchase(#commonCostingVersionId, ModuleInventPurchSales::Purch, CostingVersionPriceType::Purch, NoYes::No, NoYes::Yes, InventItemCostingType::Undefined);
insertInventItemPriceDimSalesPurchase('', ModuleInventPurchSales::Purch, CostingVersionPriceType::Purch, NoYes::Yes, NoYes::Yes, InventItemCostingType::Last);
// copy sales prices
insertInventItemPriceDimSalesPurchase(#commonCostingVersionId, ModuleInventPurchSales::Sales, CostingVersionPriceType::Sales, NoYes::No, NoYes::No, InventItemCostingType::Undefined);
if (rowCount)
{
costingVersion.LastUpdate = systemdateget();
costingVersion.write();
}
ttscommit;
}
Источник: http://blogs.technet.com/dynamicsaxs...ense-code.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
|