Интеграция SharePoint Server с Oracle
пользователь: Sergey Belskiy на 21.03.2012 17:24
Категория: Sharepoint
Добрый день всем. Сегодня я хотел бы поделиться навыками работы с внешними данными, а именно как построить решения для интеграции SharePoint Server с Oracle.
Итак у Вас должен быть установлен SharePoint Server 2010 Std с настроенными службами Secure Store Service и Business Data Connectivity и установлен и настройн Oracle Enterprise 11g.
Всем известно, что Microsoft Designer предлагает подключения только с SQL базами или подключения к WCF сервису или собственной .Net сборки модели.
Но что же делать если нам нужно интеграция с Oracle базой. Для этого у Вас есть два варианта решения:
- Лёгкий способ – взять шаблон LobSystemInstance на официальном сайте Microsoft (https://msdn.microsoft.com/en-us/library/ie/ff464424.aspx ) и подредактировать его для собственных целей.
- Сложнее способ – используя 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