Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Com wrapper c#

85K
19 октября 2012 года
and87s
4 / / 19.10.2012
Пишу саму простую com-обертку. Есть 2 длл - клиентская объектная модель для sharepoint (Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll). Добавляю их в референс. пишу следующий код:

Код:
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using Microsoft.SharePoint.Client;

namespace SharePointService
{
    public class SharePoint
    {
       
        ClientContext clientContext;

        public ClientContext getclientContext(string url)
        {
        ClientContext clientContext = new ClientContext(url);
        return clientContext;
        }

        public void initialize (string url)
        {
            clientContext = new ClientContext(url);
        }

        public List getlist(string namelist)
        {
            List list = clientContext.Web.Lists.GetByTitle(namelist);
            clientContext.Load(list);
            clientContext.ExecuteQuery();
            return list;
        }
        public FieldCollection getfields(List list)
        {
            clientContext.Load(list.Fields);
            clientContext.ExecuteQuery();
            return list.Fields;
        }

    }
}
Компилирую. Все хорошо. Com зарегистрировался.

Создаю клиент.

Подключаю эту созданную длл. Пишу


Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharePointService;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
           SharePoint sharepoint = new SharePoint();
           sharepoint.initialize("http://portal/sites/devel/");
           ???? list = sharepoint.getlist("Заявки пользователей");
        }
    }
}
Вопрос. Какой тип указать? По идее тип Microsoft.SharePoint.Client.List. Но он не доступен. Как быть?
  • Приведите пожалуйста код в нормальный вид с использованием форматирования. В противном случае тема буде удалена. от kot_, 19 октября 2012 года
79K
19 октября 2012 года
dron5901
21 / / 12.05.2012
используй var, пусть компилятор за тебя сам все решает
85K
19 октября 2012 года
and87s
4 / / 19.10.2012
в таком случае компилятор просит подключить сборку с типом Microsoft.SharePoint.Client.List
85K
20 октября 2012 года
Amozy
6 / / 09.10.2012
Если ты используешь какой-то тип, то он должен быть доступен в той сборке откуда идет вызов. Т.е. тебе тогда придется ставить ссылки на Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll в главное приложение. Есть более красивое решение, так же обернуть этот тип твоим враппером или производить с ним работу внутри этой библиотеки а не главного приложения.

А вообще что мешает взять готовую обертку? Ты не первый задался этим вопросом.
85K
20 октября 2012 года
and87s
4 / / 19.10.2012
Главная цель всего этого - использование в программе 1С. В принципе, я решил эту проблему с помощью ILmerge.exe. Теперь все типы, которые есть в Microsoft.SharePoint.Client.dll и Microsoft.SharePoint.Client.Runtime.dll есть в моей сборке.

Сейчас у меня другая проблема образовалась - при выполнении метода из 1С

public ClientContext getclientContext(string url)
{
ClientContext clientContext = new ClientContext(url);
return clientContext;
}
тип возвращаемого движения - COMОбъект. Все свойства доступны, а методы нет.

Подскажите, каким образом я могу обернуть этот тип?

Может можно реализовать через какой нибудь интерфейс?
85K
20 октября 2012 года
Amozy
6 / / 09.10.2012
Можно создать собственную обертку, которая будет предоставлять нужные методы наружу (либо уже более высокоуровневый метод с некоторым готовым алгоритмом)
85K
20 октября 2012 года
and87s
4 / / 19.10.2012
На счет первого варианта все понятно. А второй вариант не понял...
85K
27 октября 2012 года
Amozy
6 / / 09.10.2012
Имеется в виду что можно в самой библиотеке организовать абстракцию более высокого уровня. Допустим COM дает три функции: Load, Add и Save. Вы выполняете эти действия вместе - поэтому реализуете в библиотеке одну доступную наружу функцию UpdateDocument() и все.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог