@@ -10,10 +10,13 @@ open Microsoft.Xrm.Sdk.Messages
1010open Microsoft.Xrm .Sdk .Query
1111open Microsoft.Xrm .Sdk .Metadata
1212open Microsoft.Crm .Sdk .Messages
13+ open Microsoft.Xrm .Sdk .WebServiceClient
1314
1415// Execute request
15- let getResponse < 'T when 'T :> OrganizationResponse > ( proxy : OrganizationServiceProxy ) request =
16- proxy.Timeout <- TimeSpan( 1 , 0 , 0 )
16+ let getResponse < 'T when 'T :> OrganizationResponse > ( proxy : IOrganizationService ) request =
17+ if ( proxy :? OrganizationServiceProxy) then
18+ let orgProxy = proxy :?> OrganizationServiceProxy
19+ orgProxy.Timeout <- TimeSpan( 1 , 0 , 0 )
1720 ( proxy.Execute( request)) :?> 'T
1821
1922// Retrieve version
@@ -23,11 +26,11 @@ let retrieveVersion proxy =
2326 parseVersion resp.Version
2427
2528// Retrieve data
26- let internal retrieveMultiple proxy logicalName ( query : QueryExpression ) =
29+ let internal retrieveMultiple ( proxy : IOrganizationService ) logicalName ( query : QueryExpression ) =
2730 query.PageInfo <- PagingInfo()
2831
2932 let rec retrieveMultiple '
30- ( proxy : OrganizationServiceProxy ) ( query : QueryExpression ) page cookie =
33+ ( proxy : IOrganizationService ) ( query : QueryExpression ) page cookie =
3134 seq {
3235 query.PageInfo.PageNumber <- page
3336 query.PageInfo.PagingCookie <- cookie
@@ -68,7 +71,7 @@ let internal getEntities
6871
6972// Get all entities with a filter
7073let internal getEntitiesFilter
71- proxy ( logicalName : string )
74+ ( proxy : IOrganizationService ) ( logicalName : string )
7275 ( cols : string list ) ( filter : Map < string , obj >) =
7376
7477 let f = FilterExpression()
@@ -89,7 +92,7 @@ let getAllEntityMetadataLight proxy =
8992 resp.EntityMetadata
9093
9194// Retrieve all metadata for all entities
92- let getAllEntityMetadata ( proxy : OrganizationServiceProxy ) =
95+ let getAllEntityMetadata ( proxy : IOrganizationService ) =
9396 let request = RetrieveAllEntitiesRequest()
9497 request.EntityFilters <- Microsoft.Xrm.Sdk.Metadata.EntityFilters.All
9598 request.RetrieveAsIfPublished <- false
@@ -176,7 +179,7 @@ let getSpecificEntitiesAndDependentMetadata proxy logicalNames =
176179
177180
178181// Retrieve single entity metadata
179- let getEntityLogicalNameFromId ( proxy : OrganizationServiceProxy ) metadataId =
182+ let getEntityLogicalNameFromId ( proxy : IOrganizationService ) metadataId =
180183 let request = RetrieveEntityRequest()
181184 request.MetadataId <- metadataId
182185 request.EntityFilters <- Microsoft.Xrm.Sdk.Metadata.EntityFilters.Entity
@@ -187,7 +190,7 @@ let getEntityLogicalNameFromId (proxy:OrganizationServiceProxy) metadataId =
187190
188191
189192// Retrieves all the logical names of entities in a solution
190- let retrieveSolutionEntities proxy solutionName =
193+ let retrieveSolutionEntities ( proxy : IOrganizationService ) solutionName =
191194 let solutionFilter = [( " uniquename" , solutionName)] |> Map.ofList
192195 let solutions =
193196 getEntitiesFilter proxy " solution"
@@ -212,7 +215,13 @@ let retrieveSolutionEntities proxy solutionName =
212215let proxyHelper xrmAuth () =
213216 let ap = xrmAuth.ap ?| AuthenticationProviderType.OnlineFederation
214217 let domain = xrmAuth.domain ?| " "
215- CrmAuth.authenticate
216- xrmAuth.url ap xrmAuth.username
217- xrmAuth.password domain
218- ||> CrmAuth.proxyInstance
218+ let mfaAppId = xrmAuth.mfaAppId ?| " "
219+ let mfaReturnUrl = xrmAuth.mfaReturnUrl ?| " "
220+ let proxyInstance =
221+ match mfaReturnUrl with
222+ | " " ->
223+ let manager = CrmAuth.getServiceManagement xrmAuth.url
224+ let authToken = CrmAuth.authenticate manager ap xrmAuth.username xrmAuth.password domain
225+ CrmAuth.getOrganizationServiceProxy manager authToken
226+ | _ -> CrmAuth.getOrganizationServiceProxyUsingMFA xrmAuth.username xrmAuth.password xrmAuth.url mfaAppId mfaReturnUrl
227+ proxyInstance
0 commit comments