Перейти к публикации

Teamcenter Engeneering. Audit Manager. Создание хендлера.


Mazzi

Рекомендованные сообщения

Приветствую!

Может у кого-то в закромах есть примеры по созданию хендлеров для Legacy Audit Manager-a (так он называется в документации) для TCЕ версии 2007 (и старее). Информации в доках  и пример в \sample\examples полной информации не дали. Смогли написать болванку, вызываемую из libuser_exits. На этом пока все. Буду признателен за любую информацию по "некрофильской" верии ТСЕ

Изменено пользователем Mazzi
Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...


static logical is_WorkspaceObject(tag_t object)
{
    tag_t wso_class = NULLTAG;
    IFERR_REPORT(POM_class_id_of_class("WorkspaceObject", &wso_class));

        tag_t class_tag = NULLTAG;
    IFERR_REPORT(POM_class_of_instance(object, &class_tag));

        logical verdict = FALSE;
    IFERR_REPORT(POM_is_descendant(wso_class, class_tag, &verdict));

    return (verdict);
}

static logical convert_uid_to_tag(char *uid_string, tag_t *object_tag)
{
    logical  is_valid = TRUE;

    /* this function does not return an error code */
    ITK__convert_uid_to_tag(uid_string, object_tag);
    if (object_tag == NULLTAG)
    {
        is_valid = FALSE;
    }
    IFERR_REPORT(POM_is_tag_valid(*object_tag, &is_valid));
    return is_valid;
}

static void demo_audit_get_records(void)
{
    int ifail = ITK_ok;

    AUDIT_log_query_t aLogQuery;
    AUDIT_initialize_log_query(&aLogQuery);
    aLogQuery.objTypeName = "Item";
    aLogQuery.objectOperator = AUDIT_equal;
    aLogQuery.name = "6970819";
    aLogQuery.nameOperator = AUDIT_equal;
    //aLogQuery.eventTypeName = "__Check_Out";
    //aLogQuery.eventTypeNameOperator = AUDIT_equal;

    int colCount = 0;
    char **colNames = NULL;
    QRY_user_query_row_t *resRows;
    IFERR_ABORT(AUDIT_get_records(aLogQuery , 0, NULL, &colCount, &colNames, &resRows));

    int ObjectUIDIndx = 0;
    int ObjectTypeIndx = 0;
    int EventTypeNameIndx = 0;
    int LoggedDateIndx = 0;
    int UserDataIndx = 0;

    for (int ii =0; ii < colCount; ii++)
    {
        if(strcmp(colNames[ii], "ObjectUID") == 0)
        {
            ObjectUIDIndx = ii;
        }
        else if(strcmp(colNames[ii], "ObjectType") == 0)
        {
            ObjectTypeIndx = ii;
        }
        else if(strcmp(colNames[ii], "EventTypeName") == 0)
        {
            EventTypeNameIndx = ii;
        }
        else if(strcmp(colNames[ii], "LoggedDate") == 0)
        {
            LoggedDateIndx = ii;
        }
        else if(strcmp(colNames[ii], "UserData") == 0)
        {
            UserDataIndx = ii;
        }
    }

    QRY_user_query_row_t* curRow = NULL;
    QRY_user_query_row_t* nextRow = NULL;
    curRow = resRows;
    while (curRow != NULL)
    {
        char *ObjectUID = curRow->values[ObjectUIDIndx];
        char *ObjectType = curRow->values[ObjectTypeIndx];
        char *EventTypeName = curRow->values[EventTypeNameIndx];
        char *LoggedDate = curRow->values[LoggedDateIndx];
        char *UserData = curRow->values[userDataIndx];

        
        tag_t object_tag = NULLTAG;
        logical  is_valid = convert_uid_to_tag(ObjectUID, &object_tag);

        if (is_valid)
        {

            tag_t type = NULLTAG;
            IFERR_REPORT(TCTYPE_ask_object_type(object_tag, &type));

            char type_name[TCTYPE_name_size_c+1] = "";
            IFERR_REPORT(TCTYPE_ask_name(type, type_name));
            char *object_id_string = NULL;
            if(is_WorkspaceObject(object_tag))
            {
               char *object_id_string = NULL;
               IFERR_REPORT(WSOM_ask_object_id_string(object_tag, &object_id_string));
               printf("\n %s \n", object_id_string);
               if(object_id_string) MEM_free(object_id_string);
            }
        }
        else  printf("\n %s \n", ObjectUID);

        printf(" \t ObjectUID: %s \n", ObjectUID);
        printf(" \t ObjectType: %s \n",  ObjectType);
        printf(" \t EventTypeName: %s  \n",  EventTypeName);
        printf(" \t LoggedDate: %s \n", LoggedDate );
        printf(" \t UserData: %s \n", UserData);

        nextRow = curRow->next;
        curRow = nextRow;


    }
    if (colNames) MEM_free(colNames);
}

 

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

 

#include <A2ABCD/A2AuditEPMTaskReject.hxx>

#include <string.h>
#include <pom/pom/pom.h>
#include <tccore/aom_prop.h>

/* disable unreferenced formal parameter errors */
#pragma warning(disable: 4100)



int A2AuditEPMTaskReject(tag_t EPMPerformSignoffTaskTag,
                         int secondaryObjectCount, /* not used */
                         tag_t* secondaryObjectTags, /* not used */
                         char** secondaryQualifiers, /* not used */
                         tag_t eventType, /* not used */
                         int paramCount,
                         char** paramNames,
                         char** paramValues,
                         int errorCode, /* not used */
                         const char* errorMessage, /* not used */
                         tag_t Fnd0WorkflowAuditTag)
{
    int ifail = ITK_ok;
    if ( paramCount ==0 ) return ITK_ok;

    tag_t signoffTag = NULLTAG;
    for ( int ii = 0; ii < paramCount; ii++ )
    {
        if(strcmp(paramNames[ii],"signoff") == 0)
        {
            char* signoffUID=paramValues[ii];
            ifail = POM_string_to_tag(signoffUID, &signoffTag);
            if(ifail != ITK_ok) return ifail;
            break;
        }
    }

    if (signoffTag == NULLTAG)
    {
        return ITK_ok;
    }

    tag_t auditClassTag = NULLTAG;
    ifail = POM_class_of_instance(Fnd0WorkflowAuditTag, &auditClassTag);
    if(ifail != ITK_ok) return ifail;

    char* auditClassName = NULL;
    ifail = POM_name_of_class (auditClassTag, &auditClassName);
    if(ifail != ITK_ok) return ifail;

    tag_t signoffClassTag = NULLTAG;
    ifail = POM_class_of_instance( signoffTag, &signoffClassTag);
    if(ifail != ITK_ok) return ifail;

    char* signoffClassName = NULL;
    ifail = POM_name_of_class (signoffClassTag, &signoffClassName);
    if(ifail != ITK_ok) return ifail;
    
    logical exists = false;
    ifail = POM_attr_exists("a2_custom_property", signoffClassName, &exists);
    if(ifail != ITK_ok) return ifail;
    if (exists == TRUE)
    {
        char* propVal = NULL;
        ifail = AOM_ask_value_string (signoffTag, "a2_custom_property" ,&propVal);
        if(ifail != ITK_ok) return ifail;
        
        exists=false;
        ifail = POM_attr_exists("a2_signoff_custom_property", auditClassName, &exists);
        if(ifail != ITK_ok) return ifail;
        if (exists == TRUE)
        {
            ifail = AOM_set_value_string(Fnd0WorkflowAuditTag,
                        "a2_signoff_custom_property", propVal);
            if(ifail != ITK_ok) return ifail;
        }
        if(propVal) MEM_free(propVal);
    }
    if (auditClassName) MEM_free(auditClassName);
    if (signoffClassName) MEM_free(signoffClassName);
    return ifail;
}

 

 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

 

 

#include <pom/pom/pom.h>

static void getSignoffAuditRecords(tag_t task_tag, tag_t signoff_tag, int *n_records, tag_t **records)
{
    tag_t class_tag = NULLTAG;
    POM_class_id_of_class( "Fnd0WorkflowAudit", &class_tag);
    
    tag_t object_attr = NULLTAG;
    POM_attr_id_of_attr("fnd0Object", "Fnd0WorkflowAudit", &object_attr);
    
    tag_t signoff_attr = NULLTAG;
    POM_attr_id_of_attr("fnd0Signoff", "Fnd0WorkflowAudit", &signoff_attr);
    
    tag_t userid_attr = NULLTAG;
    POM_attr_id_of_attr("fnd0UserId", "Fnd0WorkflowAudit", &userid_attr);
    
    tag_t logged_date_attr  = NULLTAG;
    POM_attr_id_of_attr( "fnd0LoggedDate",  "Fnd0WorkflowAudit", &logged_date_attr );
    
    tag_t find_task = NULLTAG;   
    POM_create_enquiry_on_tag (class_tag, object_attr, POM_is_equal_to, &task_tag, &find_task);
    
    tag_t find_signoff = NULLTAG;
    POM_create_enquiry_on_tag (class_tag, signoff_attr, POM_is_equal_to, &signoff_tag, &find_signoff);
    
    tag_t find_task_signoffs = NULLTAG;
    POM_combine_enquiries( find_task , POM_and , find_signoff , &find_task_signoffs);
    
    int n_sort_attrs = 1;
    int sort_order[1] = {POM_order_ascending};
    POM_order_enquiry( find_task_signoffs, 1, &logged_date_attr, sort_order );

    int n_found = 0;
    tag_t *found = NULL;
    POM_execute_enquiry(find_task_signoffs, &n_found, &found);
    *n_records = n_found;
    (*records) = (tag_t *) MEM_alloc ( sizeof (tag_t) * n_found);
    for(int ii = 0;  ii < n_found; ii++)
    {
        (*records)[ii] = found[ii];
    }  
    if(n_found > 0) MEM_free(found);
}

 

 

 

Может чего сгодится.

Изменено пользователем Krusty
Ссылка на сообщение
Поделиться на других сайтах

Может чего сгодится.

Благодарю. читать аудитлоги мы умеем, а вот это A2AuditEPMTaskReject заинтересовало. Отдам нашим программерам

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...