Hello everyone, I need some help with my report, I´m new in ARIS and I want my report to do the next activities:
Find or create a new group in the Explorer if this not exists.
Find or create a new model inside the new group created (validate if the model exist)
Find or create new objects and assign them to the model creates previously (validate if the objects created exist)
Maybe I´m asking a lot of thing but I hope you could help me by giving me an example about how can I do this report from aris scripting...
Thanks in advanced...
:)
Hi!
1. Creates child group in your group
function GetOrCreateChild(oGroup,sName, nLoc) { if (typeof(nLoc)=="undefined") nLoc = -1; var aChilds = oGroup.Childs(); var sSName = swShortName(sName); for (var i=0; i<aChilds.length; i++) { var oChild = aChilds[i]; if (swIsEqualStrings(oChild.Name(nLoc),sSName)) return oChild; } return oGroup.CreateChildGroup(sSName,nLoc); }
swShortName() - creates short name for group (uo to 80 symbols)
swIsEqualStrings() - smart compare of strings, you may use ==
2. Creates/deletes model in group
//------------------------------------------------------------------------------------------ //функция ищёт в папке модель с указанным именем и... var GoCM_DEL_CREATE = 3; //Delete existing model and create new var GoCM_DEL_ONLY = 2; //Delete existing model only var GoCM_CREATE_ONLY= 1; //Create new model "<name>(1)" var GoCM_CREATE_NOT_EXIST = 4; //Create new model if and only if there is no such model. function GetOrCreateModel(oGroup, sName, nType, nMode, nLoc) { //Если режим подразумевает удаление существующих моделей с этим именем, //то найдём и удалим var oModel = null; if (nMode&GoCM_DEL_ONLY) { var aModels = oGroup.ModelListFilter(nType); for (var i=0; i<aModels.length; i++) { var oModel = aModels.ValueAt(i); if (swIsEqualStrings(oModel.Name(nLoc),sName)) oGroup.Delete(oModel); } } //Если режим подразумевает создать if (nMode&GoCM_CREATE_ONLY) { //Создаём модель для описания подразделения oModel = oGroup.CreateModel(nType, swShortName(sName), nLoc); } if (nMode&GoCM_CREATE_NOT_EXIST) { var aModels = oGroup.ModelListFilter(nType); for (var i=0; i<aModels.length; i++) { var oModel = aModels.ValueAt(i); if (swIsEqualStrings(oModel.Name(nLoc),sName)) return oModel; } oModel = oGroup.CreateModel(nType, swShortName(sName), nLoc); } return oModel; }
3. Gets or creates new object. A lot of code, but there are some useful methods for searching by array of attributes, sets full name attributes and so on.
//--------------------------------------------------------------------------------------- //Функция устанавливает имя объекта с проверкой на длинну. //Если слишком длинное, то устанавливает сокращённое, а длинное записывает в fullName function SetNameForItem(oDef, sFullName, nLoc, nShortNameType) { oDef = getDef(oDef); if (typeof(nShortNameType)=="undefined") nShortNameType = 2; if (MO.oProfile.ATTR_FULL_NAME_LONG!=undefined) var nAFN = MO.oProfile.ATTR_FULL_NAME_LONG; else var nAFN = Constants.AT_NAME_FULL; switch (nShortNameType) { case 1: var sShortName = swShortName(sFullName,0); break; case 2: var sShortName = swShortName2(sFullName); break; default: var sShortName = swShortName(sFullName,0); } SetValueOrWait(oDef.Attribute(nAFN,nLoc), sFullName); SetValueOrWait(oDef.Attribute(Constants.AT_NAME,nLoc),sShortName); return sShortName; } //------------------------------------------------------------------------------------ //Функция возвращает уже существующий объект с данным именем или создаёт новый //oGroup - папка, в которой создастся объект //nType - ти объекта //sFullName - полное наименование объекта, м.б. сокращено, если слишком длинное //bAll - возвращает все найденные объекты. //nShortNameType - тип укорачивания имени (1 - аббревиатура, 2 - обрезание) //bAllTypes - возвращает все объекты с таким именем, в не зависимости от типа. // если объектов нет, то новый создаётся в соотвествии с типом nType function GetOrCreateDef(oGroup, nType, sFullName, nLoc, oProfile, bAll, nShortNameType, bAllTypes) { var aAttrs = new __map(); aAttrs.Insert(Constants.AT_NAME, sFullName); return GetOrCreateDefAttr(oGroup, nType, nLoc, aAttrs, oProfile, bAll, nShortNameType, bAllTypes); } //------------------------------------------------------------------------------------ //Функция смотрит все объекты в базе //фильтрует по указанным атрибутам Attrs (в формате __map: номер атрибута-значение) //Если нет такого объекта, создаёт новый и устанавливает указанные атрибуты function GetOrCreateDefAttr(oGroup, nType, nLoc, aAttrs, oProfile, bAll, nShortNameType, bAllTypes) { if (typeof(aAttrs)=="undefined") return null; if (aAttrs.length==0) return null; if (typeof(nType)=="undefined") return null; //Найдём короткое наименование var sFullName = aAttrs.Get(Constants.AT_NAME); if (!IsDefined(nShortNameType)) nShortNameType = 2; if (!IsDefined(sFullName)) sFullName = "undefined"; switch (nShortNameType) { case 2: var sShortName = swShortName2(sFullName); break; case 1: default: var sShortName = swShortName(sFullName,0); } //Найдём тип, который нужно искать var nTempType = nType; if (IsDefined(bAllTypes)) if (bAllTypes) nTempType = -1; //Найдём объекты var temp = SearchDef(nTempType, nLoc, aAttrs, bAll, nShortNameType) //Результат - //null - если ошибка //obj - если !bAll //arr - если bAll var ret = new Array(); if (IsDefined(temp)) //Если ошибка, то массив останется пустым { if (IsDefined(temp.length)) //если массив, то перепрсвоим ret = temp; else ret.push(temp); //если элемент, то добавим } //Если не нашли ни одного объекта, создаём такой if (ret.length==0) { if (nType<1) return null; ret.push(oGroup.CreateObjDef(nType,sShortName,nLoc)); SetValueOrWait(ret[0].Attribute(oProfile.ATTR_FULL_NAME_LONG, nLoc), sFullName); //Установим все атрибуты, кроме наименования for (var j=0; j<aAttrs.length; j++) { //Наименование проверяли отдельно if (aAttrs.KeyAt(j)==Constants.AT_NAME) continue; SetValueOrWait(ret[0].Attribute(aAttrs.KeyAt(j),nLoc), aAttrs.ValueAt(j)); } } //Если нужно вернуть все объекты (мало ли отличаются каким-нибудь Identifier-ом... if ((bAll!=undefined)&&(bAll)) return ret; else return ret[0]; } //------------------------------------------------------------------------------------ //nType - ти объекта //bAll - возвращает все найденные объекты. //nShortNameType - тип укорачивания имени (1 - аббревиатура, 2 - обрезание) //bAllTypes - возвращает все объекты с таким именем, в не зависимости от типа. // если объектов нет, то новый создаётся в соотвествии с типом nType function SearchDef(nType, nLoc, aAttrs, bAll, nShortNameType) { if (typeof(oDB)=="undefined") oDB = ArisData.getActiveDatabase(); if (typeof(bAll)=="undefined") bAll = false; if (typeof(aAttrs)=="undefined") return null; if (aAttrs.length==0) return null; if (typeof(nType)=="undefined") return null; var sFullName = aAttrs.Get(Constants.AT_NAME); if (!IsDefined(nShortNameType)) nShortNameType = 2; if (!IsDefined(sFullName)) sFullName = "undefined"; switch (nShortNameType) { case 2: var sShortName = swShortName2(sFullName); break; case 1: default: var sShortName = swShortName(sFullName,0); } //Почему-то глючит эта функция //иногда длинные строки не ищет //Нужно делать поиск хотя бы по одному атрибуту. //Если поиск производить без атрибутов - найдётся очень много объектов, //проверка которых будет занимать много времени. var aDefs = oDB.Find(Constants.SEARCH_OBJDEF, nType, aAttrs.KeyAt(0), nLoc, aAttrs.ValueAt(0).substr(0,50)+'*', Constants.SEARCH_CMP_WILDCARDS | Constants.SEARCH_CMP_EQUAL); var ret = new Array(); var sAttr1 = ""; var sAttr2 = ""; for (var i=0; i<aDefs.length; i++) { var oDef = aDefs[i]; var flag = true; for (var j=0; j<aAttrs.length; j++) { //Имя проверяем по короткому наименованию if (aAttrs.KeyAt(j)==Constants.AT_NAME) { sAttr1 = swNormalSpacesString(oDef.Attribute(aAttrs.KeyAt(j), nLoc).value().toUpperCase()); sAttr2 = swNormalSpacesString(sShortName.toUpperCase()); } else { sAttr1 = swNormalSpacesString(oDef.Attribute(aAttrs.KeyAt(j), nLoc).value().toUpperCase()); sAttr2 = swNormalSpacesString((""+aAttrs.ValueAt(j)).toUpperCase()); } //Если какой-то из атрибутов не совпадает, устанавливаем флаг if (!sAttr1.IsEqual(sAttr2)) { flag=false; break; } } //Если все атрибуты совпадают //добавляем объект в результирующий массив if (flag) { ret.push(aDefs[i]); if (!bAll) break; } } if ((bAll!=undefined)&&(bAll)) return ret; else return ret[0]; }
Could you help me with this? PLEASE...I need it for yesterday, and I'm already late...
Hello everyone,
Once again I need some help;
I have an excel file like this:
As you can see, there are different Company ID's, but some Company Id's share the same System and System Output; I need to create Groups named as in the System Column, but I don't want to create repeated Groups, so I just need to create 5 Groups, and then create subGroups into the Groups, taking the subgroup name from the Output System column without repeating them; AND FINALLY CREATE THE OBJECTS TAKING THE NAME FROM "Company ID" column, these objects must be into every Group (Depending on the System that every Company ID has).... PLEASE HELP!!!!! Im using a for loop, but several groups with the same name are created.... help!
Company ID | System | Output System |
ZPR - 001 | TR- Transport Sys | ERP OCP - 6.00 - 4 - 10 |
ZPR - 002 | LOG - Logistics | ERP OCP - 6.00 - 4 - 10 |
ZPR - 003 | TR- Transport Sys | ERP OCP - 6.00 - 4 - 10 |
ZPR - 004 | TR- Transport Sys | ERP OCP - 6.00 - 4 - 10 |
ZPR - 005 | ERP OCP - 6.00 - 4 - 10 | TR- Transport Sys |
ZPR - 006 | ERP OCP - 6.00 - 4 - 10 | PRO - Production Sys |
ZPR - 007 | ERP OCP - 6.00 - 4 - 10 | PRO - Production Sys |
CRC - 020 | ERP OCP - 6.00 - 4 - 10 | SS - Sales Sys |
CRC - 021 | SS - Sales Sys | ERP OCP - 6.00 - 4 - 10 |
CRC - 022 | ERP OCP - 6.00 - 4 - 10 | SS - Sales Sys |
CRC - 023 | ERP OCP - 6.00 - 4 - 10 | PRO - Production Sys |
CRC - 024 | PRO - Production Sys | ERP OCP - 6.00 - 4 - 10 |
SRS - 200 | LOG - Logistics | ERP OCP - 6.00 - 4 - 10 |
SRS - 201 | LOG - Logistics | ERP OCP - 6.00 - 4 - 10 |
SRS - 202 | LOG - Logistics | ERP OCP - 6.00 - 4 - 10 |
SRS - 203 | LOG - Logistics | ERP OCP - 6.00 - 4 - 10 |
SRS - 204 | TR- Transport Sys | ERP OCP - 6.00 - 4 - 10 |
SRS - 205 | SS - Sales Sys | ERP OCP - 6.00 - 4 - 10 |
SRS - 206 | PRO - Production Sys | ERP OCP - 6.00 - 4 - 10 |