Sergey Belskiy Technical Blog

All about SharePoint

Интеграция SharePoint Server с Oracle

Добрый день всем. Сегодня я хотел бы поделиться навыками работы с внешними данными, а именно как построить решения для интеграции SharePoint Server с Oracle.

Итак у Вас должен быть установлен SharePoint Server 2010 Std с настроенными службами Secure Store Service и Business Data Connectivity и установлен и настройн Oracle Enterprise 11g.

 

Всем известно, что Microsoft Designer предлагает подключения только с SQL базами или подключения к WCF сервису или собственной .Net сборки модели.

Но что же делать если нам нужно интеграция с Oracle базой. Для этого у Вас есть два варианта решения:

  1. Лёгкий способ – взять шаблон LobSystemInstance на официальном сайте Microsoft (http://msdn.microsoft.com/en-us/library/ie/ff464424.aspx ) и подредактировать его для собственных целей.
  2. Сложнее способ – используя Visual Studio написать собственную модель связи с Oracle.

Давайте разберём два варианта.

 

Лёгкий способ

Для начала Вы должны скоппировать предлагаемый шаблон в формат xml и открыть его в любом редакторе, можно в Блокноте. Далее Вам необходимо отредактировать поля YOUR_ORACLE_NET_SERVICE_NAME (имя сетевой службы TNS) и SECURESTORE_ORACLE_APP_ID (Ваш ключ, созданный в Secure Store Service). Если Вы используете авторизацию на стороне Oracle, то Вам необходимо отредактировать проверку подлинности.

Например, вот так должно получиться:

<LobSystemInstance Name=”Oracle HR Instance”>

        <Properties>

       <Property Name=”DatabaseAccessProvider” Type=”System.String”>Oracle</Property>

       <Property Name=”AuthenticationMode” Type=”System.String”>PassThrough</Property>

       <Property Name=”RdbConnection Data Source” Type=”System.String”>(DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = moss.competence.com)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl.competence.com)    )  )</Property>

       <Property Name=”RdbConnection Pooling” Type=”System.String”>false</Property>

       <Property Name=”RdbConnection User ID” Type=”System.String”>Oracle User Name</Property>

       <Property Name=”RdbConnection Password” Type=”System.String”>Password</Property>

      <Property Name=”RdbConnection Integrated Security” Type=”System.String” />

      <Property Name=”WildcardCharacter” Type=”System.String”>%</Property>

       </Properties>

      </LobSystemInstance>

Далее изменяете запросы к таблицам, устанавливаете фильтры, а также поля, которые хотите получить. Далее сохраняете изменения и открываете сайт Центр Администрирования. В нём заходите в раздел службы-приложения и открываете приложение Business Data Connectivity. Далее нажимаете кнопку Импорт.

Выбираете Ваш сохранённый файл и все свойства оставляете по умолчанию.

Нажимаете Импорт. Далее пройдёт процесс импорт и после можете создвать список по шаблону Внешний список и указывать Вашу импортированную модель.

Не забудьте дать права пользователям к Вашей импортированной BDC модели

Как результат вот что получится

Сложнее способ

Второй способ заключается в использовании инструмента Visual Studio 2010 и шаблона проекта SharePoint BDC модель. Для этого создадим проект по указанному шаблону.

В открытой модели создадим три метода

И опишем каждый с полями которые мы получаем и которые отдаём.

Далее создадим методы обработки. Создадим обработчик ReadList().

publicstaticIEnumerable<EntityOracle> ReadList()

{

List<EntityOracle> employees = newList<EntityOracle>();

 

string connectionString = “Data Source=orcl;Persist Security Info=True;User ID=UserName;Password=Password;Unicode=True”;

 

using (OracleConnection connection = newOracleConnection())

   {

       connection.ConnectionString = connectionString;

       connection.Open();

OracleCommand command = connection.CreateCommand();

string sql = “SELECT id, nameuser, userdepart, datecreated FROM system.wss”;

       command.CommandText = sql;

OracleDataReader reader = command.ExecuteReader();

while (reader.Read())

       {

EntityOracle employee = newEntityOracle();

           employee.Id = Convert.ToInt32(reader[“id”]);

           employee.NameUser = Convert.ToString(reader[“nameuser”]);

           employee.UserDepart = Convert.ToString(reader[“userdepart”]);

           employee.DateCreated = Convert.ToDateTime(reader[“datecreated”]);

           employees.Add(employee);

        }

   }

return employees;

}

 

Далее создадим обработчик на чтение элемента ReadItem()

publicstaticEntityOracle ReadItem(int id)

{

EntityOracle employees = newEntityOracle();

 

string connectionString = “Data Source=orcl;Persist Security Info=True;User ID=UserName;Password=Password;Unicode=True”;

 

using (OracleConnection connection = newOracleConnection())

     {

         connection.ConnectionString = connectionString;

         connection.Open();

OracleCommand command = connection.CreateCommand();

string sql = “SELECT * FROM system.wss where ID=” + id;

         command.CommandText = sql;

OracleDataReader reader = command.ExecuteReader();

while (reader.Read())

         {

 

             employees.Id = id;

             employees.NameUser = Convert.ToString(reader[“NAMEUSER”]);

             employees.UserDepart = Convert.ToString(reader[“USERDEPART”]);

             employees.DateCreated = Convert.ToDateTime(reader[“DATECREATED”]);

         }

 

       }

 

return employees;

}

 

Далее создадим обработчик на создание нового элемента в базе Oracle.

publicstaticEntityOracle Create(EntityOracle newEntityOracle)

{

string connectionString = “Data Source=orcl;Persist Security Info=True;User ID=UserName;Password=Password;Unicode=True”;

 

using (OracleConnection connection = newOracleConnection())

    {

EntityOracle empl = newEntityOracle();

        connection.ConnectionString = connectionString;

        connection.Open();

 

        empl.Id = newEntityOracle.Id;

        empl.NameUser = newEntityOracle.NameUser;

        empl.UserDepart = newEntityOracle.UserDepart;

        empl.DateCreated = newEntityOracle.DateCreated;

 

string strInsertCmd = “Insert Into system.wss (id, nameuser, userdepart, datecreated) VALUES(:id, :nameuser, :userdepart, :datecreated)”;

OracleCommand InsertCommand = newOracleCommand(strInsertCmd, connection);

        InsertCommand.Parameters.Add(“id”, OracleType.Int32, 0, “id”);

        InsertCommand.Parameters[“id”].Value = newEntityOracle.Id;

        InsertCommand.Parameters.Add(“nameuser”, OracleType.VarChar, 0, “nameuser”);

        InsertCommand.Parameters[“nameuser”].Value = newEntityOracle.NameUser;

        InsertCommand.Parameters.Add(“userdepart”, OracleType.VarChar, 0, “userdepart”);

        InsertCommand.Parameters[“userdepart”].Value = newEntityOracle.UserDepart;

        InsertCommand.Parameters.Add(“datecreated”, OracleType.DateTime, 0, “datecreated”);

        InsertCommand.Parameters[“datecreated”].Value = newEntityOracle.DateCreated;

        InsertCommand.ExecuteNonQuery();

     }

     return newEntityOracle;

}

 

Вот и всё. Деплоим решение и даём пользователям права на созданную модель. И после создаём список по шаблону Внешний список и указываем созданную модель.

Всем удачи в нелёгкой но интересной разработке J