EH

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...

:)

 

by Ilya Seletkov
Posted on Mon, 01/13/2014 - 07:52

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 ==
0
by Ilya Seletkov
Posted on Mon, 01/13/2014 - 07:58

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;
}

 

0
by Ilya Seletkov
Posted on Mon, 01/13/2014 - 08:02

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];
} 

 

 

0
by Edgar Hatchinson Author
Posted on Tue, 01/14/2014 - 02:09

In reply to by iseletkov

Ilya Sletkov.... Thanks for your help... your code is really helpfull... are you Russian? Russia is one of the Countries i like the most... again Thanks a lot...

0
by Edgar Hatchinson Author
Posted on Fri, 01/31/2014 - 19:36

In reply to by iseletkov

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

 

0
by Edgar Hatchinson Author
Posted on Tue, 01/14/2014 - 02:08

Ilya Sletkov.... Thanks for your help... your code is really helpfull... are you Russian? Russia is one of the Countries i like the most... again Thanks a lot...

0

Featured achievement

Rookie
Say hello to the ARIS Community! Personalize your community experience by following forums or tags, liking a post or uploading a profile picture.
Recent Unlocks

Leaderboard

|
icon-arrow-down icon-arrow-cerulean-left icon-arrow-cerulean-right icon-arrow-down icon-arrow-left icon-arrow-right icon-arrow icon-back icon-close icon-comments icon-correct-answer icon-tick icon-download icon-facebook icon-flag icon-google-plus icon-hamburger icon-in icon-info icon-instagram icon-login-true icon-login icon-mail-notification icon-mail icon-mortarboard icon-newsletter icon-notification icon-pinterest icon-plus icon-rss icon-search icon-share icon-shield icon-snapchat icon-star icon-tutorials icon-twitter icon-universities icon-videos icon-views icon-whatsapp icon-xing icon-youtube icon-jobs icon-heart icon-heart2 aris-express bpm-glossary help-intro help-design Process_Mining_Icon help-publishing help-administration help-dashboarding help-archive help-risk icon-knowledge icon-question icon-events icon-message icon-more icon-pencil forum-icon icon-lock