با سلام

می خوام یک فیلد رو که در محصولات invoice هست رو با هم جمع کنم و داخل یک فیلد داخل فرم invoice بگذارم.

با جاوا و ajax query نتونستم به اطلاعات product های invoice دسترسی پیدا کنم بخاطر همین از plugin استفاده کردم و کد زیر رو نوشتم.

با این کد به اطلاعات product ها دسترسی پیدا می کنه و عملیات جمع هم به خوبی انجام میشه اما نمی دونم چرا مبلغ نهایی در فیلد مورد نظر در invoice قرار نمی گیره.

احتمالا نحوه set کردنم اشتباهه؛ لطفا اعلام نظر کنید.

با تشکر

 

سلام

 

نکته اول اینکه مقداری که تنظیم میکنید Decimal هست. باید از نوع Money باشه. بنابراین تبدیلش کنید با دستور

new Money(totalprice)

دومین نکته هم اینکه قبل save نباید یه update داشته باشید؟

سلام ممنون از یادآوریتون

برای آپدیت شدن کد زیر رو استفاده کردم:

            crm.UpdateObject(Invoice);

اما error ذیل رو میده.

The context is not currently tracking the 'invoice' entity.

از یه دستور دیگه باید استفاده کنم؟

با تشکر

Context رو اول Detach بزنید و بعد Attach بزنید به Invoice.

ببخشید میشه بیشتر توضیح بدید

ممنون میشم

context.Detach();

context.Attach(invoice);

که احتمالاً این دوتا متد متعلق به crm شما خواهند بود.

سلام و ممنون از راهنماییتون

کد بدون خطا اجرا میشه اما هیچ تغییری در صفحه ایجاد نمی شه ؛ یعنی فیلد مقدار نمیگیره!!

کد به شکل پیوست می باشد.

    private static void InvoiceCopy(IOrganizationService service, Guid IID)
    {
        using (var crm = new XrmContext(service))
        {
            var Invoice = crm.InvoiceSet.Where(c => c.Id == IID).First();

            var InvoiceProducts = crm.InvoiceDetailSet.Where(c => c.InvoiceId.Id == Invoice.Id);
            decimal totalprice = 0;
            foreach (var ip in InvoiceProducts)
            {
                totalprice = ip.new_totalamount.Value + totalprice;
                crm.SaveChanges();
                crm.Detach(ip);
            }
            crm.Attach(Invoice);
            Invoice["new_TotalAmount"] = new Money(totalprice);
            //Invoice.new_TotalAmount.Equals(new Money(totalprice));
            crm.UpdateObject(Invoice);
            //crm.SaveChanges();
            
            
        }

بعد از Update باید از دستور savechanges هم استفاده کنید. همون خطی که کامنت شده.

سلام

استفاده می کنم اما error پیوست رو میده.

نمیدونم چرا میگه این فیلد موجود نیست!

ببخشید بابت اون موضوع که متوجه شدم که اسم فیلد رو حروف بزرگ استفاده کردم که error میده.

اما بعد از اینکه از changesave استفاده می کنم یه اتفاقی که می فته اینه که برنامه توی loop میفته؛ چون من این پلاگین رو روی update فرم رجیستر کردم ؛ و وقتی روی changesave میرسه چون صفحه داره update میشه مجددا کد اجرا میشه.

step مربوط به رجیستر کردن رو روی چه چیزی بگذارم که این مشکل به وجود نیاد؛ چون در واقع من می خوام روی save شدن فرم این کد اجرا بشه.

با تشکر

اگر مطابق با SDK مایکروسافت نوشته باشید، قبل از ورود به اجرای این متد جایی هست که این متد را صدا زدید. اونجا یه شرط بذارید که context.depth رو چک کنه. اگر کوچکتر از 2 بود متد صدا زده بشه و در غیر اینصورت کاری انجام نده.

سلام

بسیار عالی ؛ ممنونم

پیروز و سربلند باشید