Question

Je crée nouveau public de manière programmatique mais je veux définir son GUID par code (le mien)

est-il possible de faire cela?Si oui, alors comment?

Était-ce utile?

La solution

AudienceID est un champ interne défini par SharePoint.Vous ne pouvez pas la définir, mais vous pouvez le récupérer s'il a été enregistré sur la DB.

Quelle est votre exigence qui signifie que vous devez contrôler l'ID d'audience?Généralement, vous récupéreriez l'audience par nom.Si vous avez besoin que vous puissiez accéder à la valeur d'audience.

espère que cela aide.

Autres conseils

Veuillez vous référer le lien ci-dessous link M. Raju

http:// social.technique.microsoft.com/forums/da/sharepoint2010Programmation/thread/181fdb91-B16D-4E51-A9A4-454C8AD1C374

Vous constaterez qu'il n'est pas possible car SharePoint gère GUID en interne.Donc, vous ne pouvez pas l'affecter.Dans certains cas, il est possible mais dans votre cas, ce n'est pas possible.

J'ai pu faire cela.J'ai créé une procédure stockée personnalisée (en copiant et modifiant celui utilisé par l'API pour créer des publics) pour créer le public avec le GUID dont j'avais besoin.Regardez les processus de l'orgle dans le profil DB pour voir comment cela se fait.

Quoi qu'il en soit, une fois que j'ai créé le public avec la proc.J'ai utilisé l'administrateur central pour configurer les règles.

En général, la messagerie avec des bases de données SharePoint n'est pas recommandée.Faites attention à ce que ce soit.C'est toujours préférable d'utiliser l'API.Cela étant dit, cela a fonctionné super.Pas d'issues.Bien testé.

code:

--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

Vous pouvez spécifier le GUID audience dans la règle du public.

$newrule = New-Object Microsoft.Office.Server.Audience.AudienceRuleComponent($property,"Not Contains","GUID");
[Void]$newaud.AudienceRules.Add($newrule);

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top