Как читать и записывать данные в P6DB через веб-службу P6 с помощью C#

Я хочу использовать аутентификацию на основе файлов cookie в веб-службе P6, и я перешел по двум ссылкам ниже.

  1. http://docs.oracle.com/cd/E16281_01/Техническая_документация/Web_Services/ProgrammersGuide/Logging_into_Primavera_Web_Services.htm#dotnetexample
  2. http://docs.oracle.com/cd/E16281_01/Техническая_документация/Web_Services/ProgrammersGuide/whnjs.htm

Теперь я могу войти в систему с аутентификацией на основе файлов cookie, но когда я пытаюсь перейти к следующему шагу, я поражен.

Например. Я хочу создать новую активность в P6 DB, я выполнил следующие шаги.

  1. Войдите в систему (создайте контейнер cookie): я добавил ссылку на службу для AuthenticationService.wsdl.

    System.Net.CookieContainer cookieContainer;
    public void Login(String userName, String password)
    {
    
        AuthenticationServiceWebRef.AuthenticationService authService = new  AuthenticationServiceWebRef.AuthenticationService();
        authService.CookieContainer = new System.Net.CookieContainer();
    
        authService.Url = ConfigurationManager.AppSettings["WSAuthenticationService"];
        AuthenticationServiceWebRef.Login loginObj = new AuthenticationServiceWebRef.Login();
        loginObj.UserName = userName;
        loginObj.Password = password;
        loginObj.DatabaseInstanceId = 1;
        loginObj.DatabaseInstanceIdSpecified = true;
        AuthenticationServiceWebRef.LoginResponse loginReturn = authService.Login(loginObj);
        cookieContainer = authService.CookieContainer;
    }
    
  2. Создайте действие: я добавляю ссылку на службу для ActivityService?wsdl

            Login(WSUsername, WSPassword);
            ActivityPortBinding apb = new ActivityPortBinding();
            apb.CookieContainer = cookieContainer;
            apb.Url = ConfigurationManager.AppSettings["WSGetDataByID"];
            Activity[] acts;
            acts = new Activity[1];
    
            Activity activity = null;
            for (int i = 0; i < 1; i++)
            {
                activity = new Activity();
                activity.ProjectObjectId = iProjectObjectID;
                activity.ProjectObjectIdSpecified = true;
                activity.Id = "P6 Test" + (i + 1);
                activity.Name = "P6 Test" + (i + 1);
                acts[i] = activity;
            }
            int [] arrayObjectIDs= apb.CreateActivities(acts);
            iRetActivityObjectID = arrayObjectIDs[0];
    

Проблема возникает на втором этапе, я не могу создать класс ActivityPortBinding.

Ошибка: не удалось найти имя типа или пространства имен «ActivityPortBinding» (вам не хватает директивы использования или ссылки на сборку?)

  1. Не могли бы вы помочь мне найти, где я ошибся в приведенном выше коде?
  2. Правильно ли я вызываю Login() на шаге 1?
  3. Какую ссылку я должен использовать для класса ActivityPortBinding на шаге 2?

Заранее спасибо!


person user3825152    schedule 10.07.2014    source источник


Ответы (2)


После того, как вы сослались на веб-службу активности, вы должны просто создать объект AcitvityService и назначить контейнер cookie объекту ActivityService. Что-то вроде следующего, если ваша папка веб-службы для службы активности называется ActivityWS, а ваша служба аутентификации называется AuthenWS.

    static System.Net.CookieContainer cookieContainer;
    static void Main(string[] args)
    {

        AuthenWS.AuthenticationService authService = new AuthenWS.AuthenticationService();
        authService.CookieContainer = new System.Net.CookieContainer();


        AuthenWS.Login loginObj = new AuthenWS.Login();
        loginObj.UserName = "xxx";
        loginObj.Password = "yyy*";
        loginObj.DatabaseInstanceId = 1;
        loginObj.DatabaseInstanceIdSpecified = true;
        AuthenWS.LoginResponse loginReturn = authService.Login(loginObj);
        if (loginReturn.Return == true) cookieContainer = authService.CookieContainer;
        else {
            Console.WriteLine ("login failed");
            return;
        }

        ActivityWS.ActivityService acService = new ActivityWS.ActivityService;
        acService.CookieContainer = cookieContainer;
        ActivityWS.Activity [] acts;
        acts = new ActivityWS.Activity[1];

        ActivityWS.Activity activity = null;
        for (int i = 0; i < 10; i++)
       {
        activity = new ActivityWS.Activity();
        activity.ProjectObjectId = iProjectObjectID;
        activity.ProjectObjectIdSpecified = true;
        activity.Id = "P6 Test" + (i + 1);
        activity.Name = "P6 Test" + (i + 1);
        acts[i] = activity;
       }

      acService.CreateActivities(acts);    

  }
person user3365973    schedule 15.10.2014

act1.ReadActivities(act)

Эта строка кода дает нуль или нулевую длину массива. Данные уже загружены P6. Есть ли какие-либо настройки на стороне P6

person Ajai Antony Kolarikal    schedule 23.10.2019