Using X++ find out all of the table field with special EDT from dictionary
Sometimes, I want to find all the table field and modify or remove data with the EDT from AOT - > dictionary.
static void Jimmy_FindEDTFromDictionary(Args _args)
{
int i,counter;
int numberOfFields;
Dictionary Dictionary = new Dictionary();
DictField DictField;
DictTable DictTable;
//Common Common;
fieldId fieldId01,fieldId02,fieldId03;
name name01,name02,name03;
str Remark;
int time;
test insertTest,upTest;
name tableName,fieldName,tablePnames;
int tableId,fieldId,tempStartTime;
Dialog dlg = new Dialog("Please enter the EDT");
dialogField dlgEDT = dlg.addField(typeId(ExtendedDataTypeName));
dialogField dlgUpData = dlg.addField(typeId(Noyes),"Clear EDT data");
DialogField dlgQVS = dlg.addField(typeId(Noyes),"QVS");
DialogField dlgNEW = dlg.addField(typeId(Noyes),"NEW");
DialogField dlgQCN = dlg.addField(typeId(Noyes),"QCN");
DialogField dlgQHK = dlg.addField(typeId(Noyes),"QHK");
DialogField dlgQUS = dlg.addField(typeId(Noyes),"QUS");
extendedTypeId edt;
Noyes updateData;
Noyes qcn,qhk,qus,qvs,news;
void ClearData()
{
Common Common;
;
Common = DictTable.makeRecord();
if(edt == extendedTypeNum(Dimension))
{
ttsbegin;
Common.selectForUpdate(true);
while select Common
where Common.(fieldId2Ext(DictField.id(),1)) != "" ||
Common.(fieldId2Ext(DictField.id(),3)) != ""
{
fieldId01 = fieldId2Ext(DictField.id(),1);
//fieldId02 = fieldId2Ext(DictField.id(),2);
fieldId03 = fieldId2Ext(DictField.id(),3);
name01 = Common.(fieldId01);
//name02 = Common.(fieldId02);
name03 = Common.(fieldId03);
if(name01 || name03)
{
/*
info(strfmt("%1 , %2 , %3 ,%4, %5",Common.(fieldnum(CustInvoiceTrans,SalesId)),
Common.(fieldnum(CustInvoiceTrans,ItemId)),name01,name02,name03));
*/
Common.(fieldId01) = "";
//Common.(fieldId02) = "";Cost center 不做变更
Common.(fieldId03) = "";
Common.doupdate();
}
}
ttscommit;
}
else
{
ttsbegin;
Common.selectForUpdate(true);
while select Common
where Common.(DictField.id()) != ""
{
name01 = Common.(DictField.id());
if(name01)
{
Common.(DictField.id()) = "";
Common.doupdate();
}
}
ttscommit;
}
}
;
dlg.doInit();
dlgEDT.value("Dimension");
dlgQCN.value(1);
dlgQHK.value(1);
dlgQUS.value(1);
dlgQVS.value(1);
dlgNEW.value(1);
if(!dlg.run())
return;
edt = global::extendedTypeName2Id(dlgEDT.value());
qcn = dlgQCN.value();
qhk = dlgQHK.value();
qus = dlgQUS.value();
qvs = dlgQVS.value();
news= dlgNEW.value();
updateData = dlgUpData.value();
//if(!Box::yesNo("Are you sure update?",DialogButton::No,"Clear EDT from Dictionary!"))
IF(!dlgEDT.value())
return;
delete_from insertTest;
time = timeNow();
tableId = Dictionary.tableNext(0);
setprefix(strfmt("%1 - %2",curext(),CuruserId()));
while(tableId)
{
DictTable = new DictTable(tableId);
if(DictTable.id() == 50356)
tableId = tableId;
if(!DictTable.isMap() && !DictTable.isView() && !DictTable.isTmp() && DictTable.rights() >= AccessType::Edit)
{
numberOfFields = DictTable.fieldCnt();
for (i = 1; i <= numberOfFields; i++)
{
DictField = new DictField(DictTable.id(),DictTable.fieldCnt2Id(i));
if(DictField && DictField.typeId() == edt)
{
counter ++;
tableName = DictTable.name();
fieldName = DictField.name();
fieldId = DictField.id();
tablePnames = tableId2PName(DictTable.id());
tempStartTime = timeNow();
insertTest.Id = counter;
insertTest.Price01 = tableId;
insertTest.Price02 = fieldId;
insertTest.ItemId = tableName;
insertTest.Name = tablePnames;
insertTest.VendName = fieldName;
insertTest.BomId = fieldid2pname(tableId,fieldId);
insertTest.doInsert();
info(strfmt("%5.[%6] Table: %1,%2 ;field: %3,%4",tableId,tableName,fieldId,fieldName,counter,tablePnames));
if(updateData)
{
if(QCN)
{
changecompany("QCN")
{
ClearData();
}
}
if(QHK)
{
changecompany("QHK")
{
ClearData();
}
}
if(QUS)
{
changecompany("QUS")
{
ClearData();
}
}
if(QVS)
{
changecompany("QVS")
{
ClearData();
}
}
if(NEWS)
{
changecompany("NEW")
{
ClearData();
}
}
}
if(!Remark)
Remark = tableName;
else
Remark += "," + tableName;
ttsbegin;
upTest = test::find(insertTest.ItemId,insertTest.VendName,true);
if(UpTest)
{
upTest.CustName = strlrtrim(global::time2StrHMS(timeNow() - tempStartTime));
upTest.doUpdate();
}
ttscommit;
}
}
}
tableId = Dictionary.tableNext(tableId);
}
info(Remark);
info(strfmt("total took time %1",global::time2StrHMS(timenow() - time)));
/**
select ID,PRICE01,ItemId,NAME,PRICE02, VENDNAME,BomId,CUSTNAME from TEST a
where a.DATAAREAID = 'qvs' and a.CUSTNAME != '0:00:00'
order by CUSTNAME desc
go
*/
}
{
int i,counter;
int numberOfFields;
Dictionary Dictionary = new Dictionary();
DictField DictField;
DictTable DictTable;
//Common Common;
fieldId fieldId01,fieldId02,fieldId03;
name name01,name02,name03;
str Remark;
int time;
test insertTest,upTest;
name tableName,fieldName,tablePnames;
int tableId,fieldId,tempStartTime;
Dialog dlg = new Dialog("Please enter the EDT");
dialogField dlgEDT = dlg.addField(typeId(ExtendedDataTypeName));
dialogField dlgUpData = dlg.addField(typeId(Noyes),"Clear EDT data");
DialogField dlgQVS = dlg.addField(typeId(Noyes),"QVS");
DialogField dlgNEW = dlg.addField(typeId(Noyes),"NEW");
DialogField dlgQCN = dlg.addField(typeId(Noyes),"QCN");
DialogField dlgQHK = dlg.addField(typeId(Noyes),"QHK");
DialogField dlgQUS = dlg.addField(typeId(Noyes),"QUS");
extendedTypeId edt;
Noyes updateData;
Noyes qcn,qhk,qus,qvs,news;
void ClearData()
{
Common Common;
;
Common = DictTable.makeRecord();
if(edt == extendedTypeNum(Dimension))
{
ttsbegin;
Common.selectForUpdate(true);
while select Common
where Common.(fieldId2Ext(DictField.id(),1)) != "" ||
Common.(fieldId2Ext(DictField.id(),3)) != ""
{
fieldId01 = fieldId2Ext(DictField.id(),1);
//fieldId02 = fieldId2Ext(DictField.id(),2);
fieldId03 = fieldId2Ext(DictField.id(),3);
name01 = Common.(fieldId01);
//name02 = Common.(fieldId02);
name03 = Common.(fieldId03);
if(name01 || name03)
{
/*
info(strfmt("%1 , %2 , %3 ,%4, %5",Common.(fieldnum(CustInvoiceTrans,SalesId)),
Common.(fieldnum(CustInvoiceTrans,ItemId)),name01,name02,name03));
*/
Common.(fieldId01) = "";
//Common.(fieldId02) = "";Cost center 不做变更
Common.(fieldId03) = "";
Common.doupdate();
}
}
ttscommit;
}
else
{
ttsbegin;
Common.selectForUpdate(true);
while select Common
where Common.(DictField.id()) != ""
{
name01 = Common.(DictField.id());
if(name01)
{
Common.(DictField.id()) = "";
Common.doupdate();
}
}
ttscommit;
}
}
;
dlg.doInit();
dlgEDT.value("Dimension");
dlgQCN.value(1);
dlgQHK.value(1);
dlgQUS.value(1);
dlgQVS.value(1);
dlgNEW.value(1);
if(!dlg.run())
return;
edt = global::extendedTypeName2Id(dlgEDT.value());
qcn = dlgQCN.value();
qhk = dlgQHK.value();
qus = dlgQUS.value();
qvs = dlgQVS.value();
news= dlgNEW.value();
updateData = dlgUpData.value();
//if(!Box::yesNo("Are you sure update?",DialogButton::No,"Clear EDT from Dictionary!"))
IF(!dlgEDT.value())
return;
delete_from insertTest;
time = timeNow();
tableId = Dictionary.tableNext(0);
setprefix(strfmt("%1 - %2",curext(),CuruserId()));
while(tableId)
{
DictTable = new DictTable(tableId);
if(DictTable.id() == 50356)
tableId = tableId;
if(!DictTable.isMap() && !DictTable.isView() && !DictTable.isTmp() && DictTable.rights() >= AccessType::Edit)
{
numberOfFields = DictTable.fieldCnt();
for (i = 1; i <= numberOfFields; i++)
{
DictField = new DictField(DictTable.id(),DictTable.fieldCnt2Id(i));
if(DictField && DictField.typeId() == edt)
{
counter ++;
tableName = DictTable.name();
fieldName = DictField.name();
fieldId = DictField.id();
tablePnames = tableId2PName(DictTable.id());
tempStartTime = timeNow();
insertTest.Id = counter;
insertTest.Price01 = tableId;
insertTest.Price02 = fieldId;
insertTest.ItemId = tableName;
insertTest.Name = tablePnames;
insertTest.VendName = fieldName;
insertTest.BomId = fieldid2pname(tableId,fieldId);
insertTest.doInsert();
info(strfmt("%5.[%6] Table: %1,%2 ;field: %3,%4",tableId,tableName,fieldId,fieldName,counter,tablePnames));
if(updateData)
{
if(QCN)
{
changecompany("QCN")
{
ClearData();
}
}
if(QHK)
{
changecompany("QHK")
{
ClearData();
}
}
if(QUS)
{
changecompany("QUS")
{
ClearData();
}
}
if(QVS)
{
changecompany("QVS")
{
ClearData();
}
}
if(NEWS)
{
changecompany("NEW")
{
ClearData();
}
}
}
if(!Remark)
Remark = tableName;
else
Remark += "," + tableName;
ttsbegin;
upTest = test::find(insertTest.ItemId,insertTest.VendName,true);
if(UpTest)
{
upTest.CustName = strlrtrim(global::time2StrHMS(timeNow() - tempStartTime));
upTest.doUpdate();
}
ttscommit;
}
}
}
tableId = Dictionary.tableNext(tableId);
}
info(Remark);
info(strfmt("total took time %1",global::time2StrHMS(timenow() - time)));
/**
select ID,PRICE01,ItemId,NAME,PRICE02, VENDNAME,BomId,CUSTNAME from TEST a
where a.DATAAREAID = 'qvs' and a.CUSTNAME != '0:00:00'
order by CUSTNAME desc
go
*/
}