Partage
  • Partager sur Facebook
  • Partager sur Twitter

odata http request

énigme énigmatique !

    7 avril 2023 à 10:01:13

    Bonjour,

    J'aurai besoin de votre aide afin d'identifier le pourquoi du comment une fonction se comporte differement avec exactement les memes parametres en entree dans 2 cas de figure relativement identique.

    Dans l'un la requete s'execute parfaitement, dans l'autre... je ne sais pas, la commande me sort de la séquence de débogage sans passer par les autres lignes et sans donner de résultat comme une sorte de break ou exit... du coup je ne sais pas voir ce qu'il se passe exactement...

    les détails:

    j'ai un datagrid radzen blazor component que je rempli a l'aide d'une requete odata ou tout se passe bien...

    ce datagrid possede une fonction expand et je souhaite remplir le second datagrid en expand avec un contenu lié a la ligné étendue... et c'est la que ca bloque...

    une fois que je récupere l'ID de ma ligne pour aller lancer ma seconde requete, je cherche encore le moyen de remplir mon second datagrid avec les bonnes données...

    j'ai donc essayé plussieurs solutions:

    Solution 1: LoadData

    <RadzenDataGrid @ref="TabPamPinArrGrid"
                        IsLoading="@isLoading"
                        Data="@TabPamPinArr"
                        Count="@countLib"
                        TItem="pam_pin_arrangement"
                        LoadData="@LoadData"
                        AllowFiltering="true"
                        FilterMode="FilterMode.Advanced"
                        FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
                        AllowColumnPicking="true"
                        AllowGrouping="true"
                        AllowColumnResize="true"
                        AllowSorting="true"
                        AllowPaging="true"
                        PageSize="15"
                        ShowPagingSummary="true"
                        RowExpand="RowExpand2"
                        Density="Density.Compact"
                        PagerHorizontalAlign="HorizontalAlign.Left"
                        ColumnWidth="150px">
                            <Template Context="PartType">
                                <RadzenCard Style="margin-bottom:20px"> 
                                    <b></b> occurences: 
                                    <RadzenButton Text="Export XLS" Icon="grid_on"  Class="mb-4 me-2"   style="position:absolute;right:115px;"/>
                                    <RadzenButton Text="Print"      Icon="print"    Class="mb-4"        style="position:absolute;right:5px;"/>
                                </RadzenCard>
                                <RadzenDataGrid @ref="ConnListID"
                                IsLoading="@isLoading"
                                Data="@ArrLibList"
                                AllowFiltering="false"
                                Count="count"
                                TItem="pam_part_lib"
                                AllowPaging="true" 
                                PageSize="15" 
                                ShowPagingSummary="true"
                                Density="Density.Compact"
                                LoadData="LoadData2"
                                PagerHorizontalAlign="HorizontalAlign.Left">
                                    <Columns>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="PartID"               Title="Part ID"                 Width="125px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="Part_Number"          Title="Part Number"             Width="200px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="Electrical_Part_Type" Title="Electrical Part Type"    Width="200px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="Description"          Title="Description"             Width="250px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="Backshell"            Title="Backshell"               Width="125px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="Backshell0"           Title="Backshell0"              Width="125px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="FLT"                  Title="FLT"                     Width="100px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="CAPS"                 Title="CAPS"                    Width="100px"/>
                                        <RadzenDataGridColumn TItem="pam_part_lib" Property="Replaced_By"          Title="Replaced By"             Width="125px"/>
                                    </Columns>
                                </RadzenDataGrid>
                            </Template>
                            <Columns>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement" Property="ID"                        Title="ID"/>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement" Property="Spec_owner"                Title="Spec Owner"/>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement" Property="Electrical_part_serie"     Title="Part Serie"/>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement" Property="Insert_arrangement_serie"  Title="Arrangement Serie"/>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement" Property="Insert_arrangement_name"   Title="Arrangement Name"/>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement" Property="Contact_code"              Title="Contact Code"/>
                                <RadzenDataGridColumn TItem="pam_pin_arrangement"         Title="Image">
                                    <Template Context="TabPamPinArr">
                                        <RadzenImage Path="@($"data:image/jpeg;base64,{Convert.ToBase64String(@TabPamPinArr.Image)}")" style="width: 200px; height: 200px;"/>
                                    </Template>
                                </RadzenDataGridColumn>
                            </Columns>
                        </RadzenDataGrid>

    et les fonctions correspondantes:

    @code {
        bool shown = false;
        bool auto = true;
        bool isLoading;
        int countList, countLib, count;
        long? arrID;
        RadzenDataFilter<pam_part_lib> dataFilter;
        IEnumerable<TabConnector> TabConnectorList;
        IEnumerable<pam_part_lib> ArrLibList, ArrLibList2;
        RadzenDataGrid<TabConnector> TabConnectorGrid;
        IEnumerable<TabPamPinLib> TabPamPinLibList;
        RadzenDataGrid<TabPamPinLib> TabPamPinLibGrid;
        IEnumerable<pam_pin_arrangement> TabPamPinArr;
        RadzenDataGrid<pam_pin_arrangement> TabPamPinArrGrid;
        RadzenDataGrid<pam_part_lib> ConnListID;
        protected override async Task OnInitializedAsync()
        {
            await base.OnInitializedAsync();
            DataAccess db = new DataAccess();
            TabConnectorList = db.GetTabConnector().AsEnumerable();
            countList = TabConnectorList.Count();
        }
        async Task LoadData(LoadDataArgs args)
        {
            isLoading = true;
            var result = await service.GetConnLib(filter: args.Filter, top: args.Top, skip: args.Skip, orderby: args.OrderBy, count: true);
            TabPamPinArr = result.Value.AsODataEnumerable();
            ArrLibList2 = (await service.GetPartLibList(filter: default, top: default, skip: default, orderby: default, count: true)).Value.AsODataEnumerable();
            countLib = result.Count;
            isLoading = false;
        }
        async Task LoadData2(LoadDataArgs args)
        {
            isLoading = true;
            string filter = args.Filter;
            CompositeFilterDescriptor odataFilter = new CompositeFilterDescriptor();
            odataFilter.FilterValue = arrID;
            odataFilter.Property = "Insert_Arrangement_ID";
            odataFilter.FilterOperator = FilterOperator.Equals;
            await dataFilter.AddFilter(odataFilter);
            filter = !string.IsNullOrEmpty(filter) ?
                    $"({dataFilter.ToODataFilterString()}) and ({filter})" : dataFilter.ToODataFilterString();
            var result = await service.GetPartLibList(filter: filter, top: args.Top, skip: args.Skip, orderby: args.OrderBy, count: true);
            ArrLibList = result.Value.AsODataEnumerable();
            count = result.Count;
            isLoading = false;
        }
        void RowExpand2(pam_pin_arrangement PartType)
        {
            arrID = PartType.ID;
        }
    }

    et enfin la fonction odata qui va me chercher mon second datagrid qui pose probleme:

            partial void OnGetPartLibList(HttpRequestMessage requestMessage);
            public async Task<ODataServiceResult<pam_part_lib>> GetPartLibList(string filter = default(string), int? top = default(int?), int? skip = default(int?), string orderby = default(string), string expand = default(string), string select = default(string), bool? count = default(bool?))
            {
                var uri = new Uri(baseUri, $"tab_pam_part_lib");
                uri = uri.GetODataUri(filter:filter, top:top, skip:skip, orderby:orderby, expand:expand, select:select, count:count);
                var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri);
    
                OnGetPartLibList(httpRequestMessage);
    
                var response = await httpClient.SendAsync(httpRequestMessage);
    
                return await response.ReadAsync<ODataServiceResult<pam_part_lib>>();
            }

    Lorsque j'utilise ma webApp comme ca, ca me rempli parfaitement mon second datagrid 1 fois.

    tous mes autres expand ne re-déclenchent pas ma fonction loadData2 et du coup m'affichent exactement le meme datagrid qu'a mon premier expand.

    Je le redis le premier expand est toujours bon mais la requete ne se met pas a jour.

    Donc j'ai changé mon fusil d'épaule et décidé de lancer la requête sur ma fonction Rowexpand2 en supprimant l'attribut loaddata2 de mon second datagrid... 

    la fonction loadata2 n'etant plus appelée voila ma nouvelle fonction RowExpand2 qui fait appel a la requete:

    void RowExpand2(pam_pin_arrangement PartType)
        {
            arrID = PartType.ID;
            isLoading = true;
            string filter = "";
            CompositeFilterDescriptor odataFilter = new CompositeFilterDescriptor();
            odataFilter.FilterValue = arrID;
            odataFilter.Property = "Insert_Arrangement_ID";
            odataFilter.FilterOperator = FilterOperator.Equals;
            var oTask = dataFilter.AddFilter(odataFilter);
            oTask.Wait();
            filter = !string.IsNullOrEmpty(filter) ?
                    $"({dataFilter.ToODataFilterString()}) and ({filter})" : dataFilter.ToODataFilterString();
            var oTask2 = service.GetPartLibList(filter: filter, top: 15, skip: 0, orderby: "", count: true);
            oTask2.Wait();
            ArrLibList = oTask2.Result.Value.AsODataEnumerable();
            count = oTask2.Result.Count;
            isLoading = false;
        }

    et c'est la que ca marche plus du tout... lors de l'appel de la fonction 

    service.GetPartLibList(filter: filter, top: 15, skip: 0, orderby: "", count: true);

    le debogage s'arrete apres la ligne 

    var response = await httpClient.SendAsync(httpRequestMessage);

    sans info sans erreur sans contenu et sans passer par les lignes suivantes en pas a pas... 

    et je vais etre honnete avec vous... je ne comprends absolument pas pourquoi...

    apres avoir suivi le contenu de la requete en direct avant l'execution de la dite ligne, le contenu est exactement le meme.. 

    a mon sens la seule difference se situe dans le fait que l'un est une tâche asynchrone quand l'autre est un simple void...

    si quelqu'un sait me mettre sur la voie j'en serai ravi... 

    d'avance merci 



    • Partager sur Facebook
    • Partager sur Twitter

    "Kaizoku oni ore wa naru !"

    odata http request

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown