Получение ID объекта в дереве Лоцман

Автор Новичок777, 08.10.19, 08:44:49

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Новичок777

Добрый день, установил плагин C# (на основе шаблона z-arthur'а). Программированию только учусь API как темный лес, не понимаю как с методами обращаться) Прошу помощи или примера! Необходимо при выделении объекта в дереве Лоцмана 2014 получить его ID. Читал API Лоцмана вроде многие методы подходят для этого, но как их использовать, помогите пожалуйста!

Новичок777

Неужели никто этим не занимался?!

Новичок777

Лоцман API перерыл, не понимаю как эти методы в плагине использовать 8-) и какие именно для получение id. Помогите форумчане, может анонимно по почте pen0004@rambler.ru  :shu: кто скинет!

1ndifferent

Интерфейс IPluginCall содержит ID объекта, на котором осуществлялся вызов плагина:

            public int PgiCheckMenuItemCom(IntPtr stFunction, IntPtr IPC)
            {
                if (IPC != null)
                {
                    IPluginCall pc = (IPluginCall)Marshal.GetTypedObjectForIUnknown(IPC, typeof(IPluginCall));
                    string funcName = Marshal.PtrToStringAnsi(stFunction);
                    if (funcName == "RunModule")
                        if (pc.IdVersion != 0)
                            return 1;
                }
                return 0;
            }

            public void RunModule(IntPtr IPC)
            {
                if (IPC != null)
                {
                    try
                    {
                        IPluginCall pc = (IPluginCall)Marshal.GetTypedObjectForIUnknown(IPC, typeof(IPluginCall));
                        Console.WriteLine(pc.IdVersion);
                    }
                    catch (Exception ex)
                    {                       
                        Debug.Print(ex.Message);
                    }
                }

1ndifferent

Пример использования:
(Получение значений из IDatasetа)

class PluginFunctions
    {
public static dynamic GetValue(IDataSet dataSet, string fieldName, bool opt = false)
        {
            if (dataSet.FieldValue[fieldName] != null)
            {
                return dataSet.FieldValue[fieldName];
            }
            else
            {
                return null;
            }
        }
      }
       

Получение списка ID связанных объектов (метод инстансовый, вызывается для объекта, в котором все основные аттрибуты уже считаны)

/// <summary>
        /// Получает список объектов, связанных с текущим по определенной связи</summary>
        /// <param name="linkName"> Название связи, по которой необходимо получить объекты, например: "Состоит из ..."</param>
        /// <param name="pc"> Указатель на интерфейс IPluginCall</param>

        public List<int> GetLinkedObjectIDs(string linkName, ref IPluginCall pc)
        {           
            List<int> retlist = new List<int>();
            try
            {
                IDataSet linkedObjectsDs = pc.GetDataSet("GetLinkedFast", new object[] {ID_Version, linkName, false});
               
                if (linkedObjectsDs.RecordCount > 0)
                {
                    for (int i = 0; i <= linkedObjectsDs.RecordCount - 1; i++)
                    {
                        retlist.Add(PluginFunctions.GetValue(linkedObjectsDs, "_ID_Version"));
                        linkedObjectsDs.Next();
                    }
                }
                return retlist;
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                return retlist;
            }           
        }


Новичок777