Установите GUID программно для новой аудитории
Вопрос
Я создаю новую аудиторию программно, но я хочу установить его guid по коду (мой собственный)
Это возможно сделать это?Если да, то как?
Решение
AudiodyID - это внутреннее поле, установленное SharePoint.Вы не можете его установить, но вы можете получить его, если он был сохранен в БД.
Каково ваше требование, которое означает, что вы должны контролировать идентификатор аудитории?Как правило, вы получите аудиторию по имени.Если вам нужно, чтобы вы могли получить доступ к значению аудиосистемы.
Надеюсь, что помогает.
Другие советы
Пожалуйста, напишите ссылку ниже Link Mr. Raju
Вы обнаружите, что это невозможно, потому что SharePoint управляет GUID внутренне.Так что вы не можете его назначить.В некоторых случаях это возможно, но в вашем случае это невозможно.
Я смог сделать это.Я создал пользовательскую хранимую процедуру (копируя и изменяя тот, который используется API для создания аудитории) для создания аудитории с нужным GUID.Посмотрите на Orgle Procs внутри профиля DB, чтобы увидеть, как это сделано.
В любом случае, как только я создал аудиторию с помощью proc.Я использовал центральный администратор, чтобы настроить правила.
В общем, возиться с базами данных SharePoint не рекомендуется.Будьте осторожны в этом.Всегда лучше использовать API.Это сказано, что это отработало отлично.Без вопросов.Хорошо проверено.
код:
--Created by James Hodges 10-19-2012
/****** Object: StoredProcedure [dbo].[usp_AddAudience_Custom] Script Date: 10/19/2012 08:52:19 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_AddAudience_Custom]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[usp_AddAudience_Custom]
GO
/****** Object: StoredProcedure [dbo].[usp_AddAudience_Custom] Script Date: 10/19/2012 08:52:19 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_AddAudience_Custom]
@AudienceID uniqueidentifier,
@OrgleName nvarchar(500),
@OrgleDescription nvarchar(1500) = NULL
AS
DECLARE
@correlationId uniqueidentifier,
@OrgleID uniqueidentifier,
@Error int,
@srError int,
@GroupType smallint,
@bRemove bit,
@OwnerAccountName nvarchar(400),
@partitionID uniqueidentifier
SET NOCOUNT ON
SET @correlationId = NEWID()
SET @GroupType = 2
SET @bRemove = 0
SET @OwnerAccountName = NULL
SET @partitionID = (SELECT TOP 1 PartitionID FROM Orgle_List WITH(NOLOCK) WHERE OrgleID = '00000000-0000-0000-0000-000000000000') --JRH ..This worked for my company. If you have more than one partition you may need to edit this.
SELECT @Error = 1
--check the OrgleID: Note: we make the Audience Name unique across the board.
SELECT @OrgleID = OrgleID FROM Orgle_List WHERE OrgleName = @OrgleName AND PartitionID = @partitionID
IF @bRemove = 1
BEGIN
IF @OrgleID IS NOT NULL
BEGIN
EXEC @Error = Orgle_RemoveOrgle @partitionID, @OrgleID, @correlationId=@correlationId
END
END
ELSE -- add a new one
BEGIN
SELECT @Error = 3
IF @OrgleID IS NOT NULL -- can't create a duplicate orgle name
GOTO CODE_EXIT
SET @Error = 0
BEGIN
-- create the new orgle name
SELECT @OrgleID = @AudienceID
BEGIN TRANSACTION
BEGIN
INSERT INTO Orgle_List ( PartitionID, OrgleID, OrgleName, OrgleNameDescription, OwnerAccountName )
VALUES ( @partitionID, @OrgleID, @OrgleName, @OrgleDescription, @OwnerAccountName )
IF @@ROWCOUNT = 1
BEGIN
-- insert into stats
DECLARE @UpdateTime as DATETIME
SET @UpdateTime = GETUTCDATE()
-- insert into stats
INSERT INTO Orgle_Stats
(PartitionID, OrgleID, GroupType, CreateTime, LastPropertyUpdate, QueryCOunt, GroupCount, MembershipCount, OrgleLock)
VALUES (@partitionID, @OrgleID, @GroupType, @UpdateTime, @UpdateTime, 0, 0, 0, 0)
IF @@ROWCOUNT <> 1
SET @Error = 3
END
ELSE
SET @Error = 3
END
IF @Error = 0
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
END
END
CODE_EXIT:
SELECT @Error AS ERROR, @OrgleID AS OrgleID
SET NOCOUNT OFF
GO
. Вы можете указать аудиторию GUID в правиле аудитории.
$newrule = New-Object Microsoft.Office.Server.Audience.AudienceRuleComponent($property,"Not Contains","GUID");
[Void]$newaud.AudienceRules.Add($newrule);
.