2009-11-06 2 views
0

나는 이걸로 머리를 부러 뜨 렸어. 어떤 도움을 주셔서 감사합니다.사용자 지정 개인 설정 공급자 - 구현 FindState 메서드

사용자 지정 PersonalizationProvider, 사용자 지정 WebPartManager 및 사용자 지정 WePart 클래스가 있습니다. 사용자마다 개인 설정 데이터를 저장하기위한 사용자 지정 데이터 테이블이 있습니다. 내 임무는 개인화 가능한 속성을 설정할 수 있도록 각 사용자가 추가 한 모든 웹 파트를 프로그래밍 방식으로 반복하는 것입니다.

는 문서에 따르면, FindState 방법은 주어진 PersonalizationStateQuery에 대한 PersonalizationStateInfoCollection을 반환

PersonalizationStateQuery pq = new PersonalizationStateQuery(); 
pq.PathToMatch = path; 
pq.UsernameToMatch = userName; 
int count; 
CustomPersonalizationProvider provider= new CustomPersonalizationProvider(); 
PersonalizationStateInfoCollection pcol = provider.FindState(PersonalizationScope.User, pq, 0, Int32.MaxValue, out count); 

PersonalizationProvider는 추상 클래스 만 내 사용자 정의 클래스의 FindState 방법에 대한 내 자신의 구현을 제공해야합니다. 지난 6 시간 동안 뭔가를 찾으려고했지만이 방법을 구현하는 방법을 모르겠습니다.

PersonalizationData는 blob입니다. 객체 배열에 그것을 deserialize 할 수 있습니다. 그러나 더 이상 아무것도. PersonalizeStateInfoCollection 위해 해당 BLOB serialize하는 방법을 모르겠다.

String BlobString = Convert.ToBase64String(UserDataBlob); 
ObjectStateFormatter formatter = new ObjectStateFormatter(); 
Object[] DeserializedObjects = (Object[])formatter.Deserialize(BlobString); 

누구의 WebPartManager는 UserPersonalizationData가 데이터베이스에 저장되어있는 바이트 배열에 직렬화하는 방법을 알고 있나요?

답변

1

PersonalizationProvier 대신 SQLPersonalizationProvider에서 공급자를 상속하십시오. 이렇게하면 FindState, ResetState, ReserUserState 및 GetCountOfState 메서드를 구현하지 않아도됩니다.

몇 달 전에이 바이트를 디코딩하려고했지만 실제로이 트릭을 사용하여 작성해야한다는 것을 알았을 때 포기했습니다.

하지만 완벽한 해결책은 아니라고 생각합니다. 공급자가 Oracle, MySql 또는 기타 SQL Server를 사용하는 경우 개인 설정 공급자의 Initialize 메서드를 호출 한 후 데이터베이스에 aspnet 표준 저장 프로 시저를 요청할 것입니다.