Войти

Показать полную графическую версию : Чтение информации из файла и передача ее на портал SharePoint


iMakS27
25-07-2013, 10:24
Добрый день!
Возникла потребность в считывании информации с файла, txt или csv, в которых находится 4 значения: время, и 3 числа - информация с расходомеров.
Эти данные должны отправляться на портал в список, чтоб персонал мог наглядно видеть значения. При этом должна быть синхронизация значений из файла с порталом, когда в файл заносятся новые данные, на портале, допустим в 12 дня эта информация так же обновляется.
На просторах интернета был найден пример с файлом контактов:

Загрузка данных в список контактов SharePoint при помощи PowerShell

$web = Get-SPWeb http://portal

$users = Import-Csv -Delimiter "`t" -Path "c:\contacts.txt"

$list = $web.Lists["Контакты"]

#Выполните команду, которая позволит узнать имена полей в списке:

#$list.Fields | select InternalName,Title | Out-GridView

$users | where {

$item = $list.AddItem();

$item["FirstName"]=$_.Firstname;

$item["Title"]=$_.Lastname;

$item["JobTitle"]=$_.Job;

$item["Company"]=$_. Company;

$item["WorkPhone"]=$_.Phone;

$item.Update();

}

Подскажите, как оформить запрос к файлу, и при этом была синхронизация данных с SharePoint.

Iska
25-07-2013, 11:02
Если б у меня был SharePoint… Но у меня и Вашего «файла, txt или csv» нет. А вот тому, у кого есть SharePoint, и кто будет писать, возможно, понадобится содержимое Вашего файла.

iMakS27
25-07-2013, 13:18
Из файла берется информация с 3-х расходомеров, это просто 3 значения допустим 1111;22222;33;
Они должны быть записаны в список SharePoint и отображены там, при этом раз в день, допустим в 12 часов они опять должны быть взяты из файла и заменены в SharePoint'е

Molchune
25-07-2013, 18:33
Ну раз файлики давать не хочешь то лови как есть :)
Структура CSV

Столбец1;Столбец2;Столбец3
1111;22222;33
1sdf3;2232;33sdf
1131;2232;33sdf
14111;34342222;3234234

Незнаю нужно тебе или нет, но тут создание элементов из csv файла

$Information = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://test" # Адрес сервера Sharepoint Services
$webName = "/" #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "test" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach ($stroka in $Information ) {
$NewItem = $spList.Items.add()
$NewItem["Столбец1"] = $stroka.Столбец1
$NewItem["Столбец2"] = $stroka.Столбец2
$NewItem["Столбец3"] = $stroka.Столбец3
$NewItem.Update()
}


а тут обновление элементов, в качестве ID принимается значения из 1 столбца

$Information = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://test" # Адрес сервера Sharepoint Services
$webName = "/" #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "test" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach ($stroka in $Information ) {
ForEach ($item in $items ) {
if($stroka.Столбец1 -eq $item["Столбец1"]){
if($item["Столбец2"] -eq $stroka.Столбец2 ){} else {
$item["Столбец2"]= $stroka.Столбец2
$item.update()
}
if($item["Столбец3"] -eq $stroka.Столбец3 ){} else {
$item["Столбец3"]= $stroka.Столбец3
$item.update()
}
}
}
}

iMakS27
26-07-2013, 02:16
Попробовал сделать как вы говорите, но опять ошибки, ошибки, ошибки...

PS C:\Users\> $Information = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://doc.site.ru/production/" # Адрес сервера Sharepoint Services
$webName = "/Lists/1/Allitemsg.aspx" #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "Расход ДТ" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach ($stroka in $Information ) {
$NewItem = $spList.Items.add()
$NewItem["Столбец1"] = $stroka.Столбец1
$NewItem["Столбец2"] = $stroka.Столбец2
$NewItem["Столбец3"] = $stroka.Столбец3
$NewItem.Update()
}

$Information = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://doc.site.ru/production/" # Адрес сервера Sharepoint Services
$webName = "/Lists/1/Allitemsg.aspx" #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "Расход ДТ" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach ($stroka in $Information ) {
ForEach ($item in $items ) {
if($stroka.Столбец1 -eq $item["Столбец1"]){
if($item["Столбец2"] -eq $stroka.Столбец2 ){} else {
$item["Столбец2"]= $stroka.Столбец2
$item.update()
}
if($item["Столбец3"] -eq $stroka.Столбец3 ){} else {
$item["Столбец3"]= $stroka.Столбец3
$item.update()
}
}
}
}

New-Object : Не удается найти тип [Microsoft.SharePoint.SPSite]: убедитесь в том, что сборка, содержащая этот тип, загруж
ена.
строка:5 знак:21
+ $spSite = new-object <<<< Microsoft.SharePoint.SPSite($siteurl)
+ CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

Нельзя вызвать метод для выражения со значением NULL.
строка:6 знак:25
+ $spWeb = $spSite.OpenWeb <<<< ($webName)
+ CategoryInfo : InvalidOperation: (OpenWeb:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Не удается индексировать в массив NULL.
строка:8 знак:24
+ $spList = $spWeb.Lists[ <<<< $listName]
+ CategoryInfo : InvalidOperation: (Расход ДТ:String) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Нельзя вызвать метод для выражения со значением NULL.
строка:11 знак:29
+ $NewItem = $spList.Items.add <<<< ()
+ CategoryInfo : InvalidOperation: (add:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Не удается индексировать в массив NULL.
строка:12 знак:10
+ $NewItem[ <<<< "Столбец1"] = $stroka.Столбец1
+ CategoryInfo : InvalidOperation: (Столбец1:String) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Не удается индексировать в массив NULL.
строка:13 знак:10
+ $NewItem[ <<<< "Столбец2"] = $stroka.Столбец2
+ CategoryInfo : InvalidOperation: (Столбец2:String) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Не удается индексировать в массив NULL.
строка:14 знак:10
+ $NewItem[ <<<< "Столбец3"] = $stroka.Столбец3
+ CategoryInfo : InvalidOperation: (Столбец3:String) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Нельзя вызвать метод для выражения со значением NULL.
строка:15 знак:16
+ $NewItem.Update <<<< ()
+ CategoryInfo : InvalidOperation: (Update:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

New-Object : Не удается найти тип [Microsoft.SharePoint.SPSite]: убедитесь в том, что сборка, содержащая этот тип, загруж
ена.
строка:22 знак:21
+ $spSite = new-object <<<< Microsoft.SharePoint.SPSite($siteurl)
+ CategoryInfo : InvalidType: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

Нельзя вызвать метод для выражения со значением NULL.
строка:23 знак:25
+ $spWeb = $spSite.OpenWeb <<<< ($webName)
+ CategoryInfo : InvalidOperation: (OpenWeb:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Не удается индексировать в массив NULL.
строка:25 знак:24
+ $spList = $spWeb.Lists[ <<<< $listName]
+ CategoryInfo : InvalidOperation: (Расход ДТ:String) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Не удается индексировать в массив NULL.
строка:29 знак:41
+ if($stroka.Столбец1 -eq $item[ <<<< "Столбец1"]){
+ CategoryInfo : InvalidOperation: (Столбец1:String) [], RuntimeException
+ FullyQualifiedErrorId : NullArray



Мне сказали, что надо скачать дополнение под названием PSRemoting, но найти в свободном доступе не получилось...
+ я так понимаю если в файле .csv находится всего 3 значения: 111;2222;3201 то их так и оставлять как строка1, строка2 или присвоить другое значение?
Туго у меня пока с пониманием работы PowerShell
Так же вопрос про
$siteUrl = "http://doc.site.ru/production/" # Адрес сервера Sharepoint Services
$webName = "/Lists/1/Allitemsg.aspx" #Имя узла
Адрес сервера и имя узла - что и куда вписывать, если допустим адрес самого портала http://doc.site.ru
Раздел где будет находится информация http://doc.site.ru/production/
А сам список, куда будет закачиваться информация находится по адресу http://doc.site.ru/production/Lists/1/Allitemsg.aspx

Molchune
26-07-2013, 09:29
С этого и надо было начинать.
Адрес сервера и имя узла - что и куда вписывать, если допустим адрес самого портала http://doc.site.ru
Раздел где будет находится информация http://doc.site.ru/production/
А сам список, куда будет закачиваться информация находится по адресу http://doc.site.ru/production/Lists/1/Allitemsg.aspx »

По поводу Мне сказали, что надо скачать дополнение под названием PSRemoting » ничего не надо, надо скрипт запускать на сервере Powershell.

я так понимаю если в файле .csv находится всего 3 значения: 111;2222;3201 то их так и оставлять как строка1, строка2 или присвоить другое значение? »
На это ответ был в предыдущем посте...
Если б у меня был SharePoint… Но у меня и Вашего «файла, txt или csv» нет. А вот тому, у кого есть SharePoint, и кто будет писать, возможно, понадобится содержимое Вашего файла. »

Адрес сервера Sharepoint Services - dns имя сайта, у тебя http://doc.site.ru
Имя узла - если у тебя ферма и там несколько сайтов то это будет имя этого сайта, вполне вероятно что это будет "production", но я незнаю твою структуру мб там будет пусто как и у меня. (это в случае если у тебя 1 сайт)
Имя списка - Это имя которые ты указывал при создании это листа. Либо просто посмотри в свойствах списка (открывашь список, далее верху "Работа со списком"->"Параметры списка"->"Название, описание и переходы"->"Имя списка") У тебя это "1"
И получаем
Типа такого


$siteUrl = "http://doc.site.ru" # Адрес сервера Sharepoint Services
$webName = "/production" #Имя узла
$listName = "1" #Имя списка
И в принципе ты сам можешь все проверить. На серевер SP, открой Powershell ISE и запусти, что покажет?


[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://doc.site.ru" # Адрес сервера Sharepoint Services
$webName = "/production" #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "1" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
$items

iMakS27
26-07-2013, 10:07
Файл, информацию с которого надо заносить в список SharePoint. Я понял свою ошибку, что сразу не прикрепил его.
Как изменится запрос, если файл будет иметь такой вид?
102098

Сейчас нет возможности проверить что Вы, Molchune, мне написали, но заранее говорю спасибо, думаю что в этот раз все получится)
В понедельник отпишусь как все прошло.

Имя списка - Это имя которые ты указывал при создании это листа. Либо просто посмотри в свойствах списка (открывашь список, далее верху "Работа со списком"->"Параметры списка"->"Название, описание и переходы"->"Имя списка") У тебя это "1"
Если так открыть, то я вижу такую информацию, название списка "Расход ДТ"
Имя: Расход ДТ
Но его веб адрес
Веб-адрес: http://doc.site.ru/production/Lists/1/Allitemsg.aspx
Это получается, что SharePoint сам присвоил ему имя "1"? И его и надо использовать?
Просто если нажать на СПИСКИ справа, это там, где располагаются все созданные списки, будет вообще вот такой адрес http://doc.site.ru/production/_layouts/viewlsts.aspx?BaseType=0

Molchune
26-07-2013, 11:25
Имя списка задается при создании списка, если в последствии оно не менялось, то оно совпадает с тем что я написал(DisplayName=Name)., Если менялось то изначальное имя остается как и было при создании, а то что в свойствах это уже DisplayName.
Также если тебе нужно именно синхронизация, то в этом файле не хватает ID. Так как без него ничего не получится. Либо раз в день удалять все значения в листе и заново заполнять из файла.
Как изменится запрос, если файл будет иметь такой вид? »
$item["Столбец2"] = $item считай что это элемент в листе, а ["Столбец2"] - это название свойства(имя столбца, в таблице)
$stroka.Столбец3 = $stroka - это твоя строка в файле, Столбец3 - это имя твоего столбца (у тебя, это одно из значений в первой строке "дата", "расходомер 1", "расходомер 2", "расходомер 3")

Еще раз повторюсь у тебя нет ID в файлике. Без него обновление будет.. но зачастую не того чего будешь ожидать.
И в принципе наверное уже проще в личку переписываться.




© OSzone.net 2001-2012