মাঠের মুখোশ

গুগল অ্যাডস এপিআই-তে, একটি এপিআই অনুরোধ কোন কোন ফিল্ড আপডেট করবে তার একটি তালিকা দেওয়ার জন্য ফিল্ড মাস্ক ব্যবহার করা হয়। ফিল্ড মাস্কে নির্দিষ্ট করা নেই এমন যেকোনো ফিল্ড সার্ভারে পাঠানো হলেও উপেক্ষা করা হয়।

ফিল্ডমাস্ক ক্লাস

.NET ক্লায়েন্ট লাইব্রেরিতে ফিল্ড মাস্ক তৈরি করার প্রস্তাবিত উপায় হলো বিল্ট-ইন FieldMasks ইউটিলিটি ক্লাস ব্যবহার করা, যা আপনাকে একেবারে গোড়া থেকে তৈরি করার পরিবর্তে একটি পরিবর্তিত অবজেক্ট থেকে ফিল্ড মাস্ক তৈরি করতে দেয়।

এখানে একটি ক্যাম্পেইন আপডেট করার উদাহরণ দেওয়া হলো, যেখানে FieldMasks.AllSetFieldsOf মেথড ব্যবহার করে সমস্ত সেট করা ফিল্ডের তালিকা সম্বলিত একটি ফিল্ড মাস্ক তৈরি করা হয়। এরপর আপনি তৈরি করা ফিল্ড মাস্কটি সরাসরি আপডেট কলে পাস করতে পারেন:

// Update campaign by setting its status to paused, and "Search network" to
// false.
Campaign campaignToUpdate = new Campaign()
{
    ResourceName = ResourceNames.Campaign(customerId, campaignId),
    Status = CampaignStatus.Paused,
    NetworkSettings = new NetworkSettings()
    {
        TargetSearchNetwork = false
    }
};

// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
    Update = campaignToUpdate,
    UpdateMask = FieldMasks.AllSetFieldsOf(campaignToUpdate)
};

// Update the campaign.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
    customerId.ToString(), new CampaignOperation[] { operation });

কখনও কখনও, আপনার একটি বিদ্যমান অবজেক্ট নিয়ে কাজ করার এবং কয়েকটি ফিল্ড আপডেট করার প্রয়োজন হতে পারে। সেক্ষেত্রে, এর পরিবর্তে FieldMasks.FromChanges মেথডটি ব্যবহার করুন। এই মেথডটি একটি ফিল্ড মাস্ক তৈরি করে যা দুটি অবজেক্টের মধ্যেকার পার্থক্যকে উপস্থাপন করে:

Campaign existingCampaign;

// Obtain existingCampaign from an earlier API call.

// Create a new campaign based on the existing campaign for update.
Campaign campaignToUpdate = new Campaign(existingCampaign);

// Update campaign by setting its status to paused, and "Search network" to
// false.
campaignToUpdate.Status = CampaignStatus.Paused;
campaignToUpdate.NetworkSettings = new NetworkSettings()
{
    TargetSearchNetwork = false
};

// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
    Update = campaignToUpdate,
    UpdateMask = FieldMasks.FromChanges(existingCampaign, campaignToUpdate)
};

FieldMaskError.FIELD_HAS_SUBFIELDS ত্রুটিগুলি পরিচালনা করুন

খুব কম ক্ষেত্রেই, আপনাকে কোনো সাবফিল্ড আপডেট না করেই একটি মেসেজ ফিল্ড সেট করার প্রয়োজন হতে পারে। নিচের উদাহরণটি বিবেচনা করুন:

// Creates a campaign with the proper resource name and an empty
// MaximizeConversions field.
Campaign campaign = new Campaign()
{
    ResourceName = ResourceNames.Campaign(customerId, campaignId),
    MaximizeConversions = new MaximizeConversions()
};

CampaignOperation operation = new CampaignOperation()
{
    Update = campaign,
    UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};

MutateCampaignsResponse response = campaignService.MutateCampaigns(
    customerId.ToString(), new CampaignOperation[] { operation });

এই এপিআই কলটি FieldMaskError.FIELD_HAS_SUBFIELDS ত্রুটির কারণে ব্যর্থ হয়। যেহেতু MaximizeConversions এর সাবফিল্ড রয়েছে, তাই Google Ads এপিআই সার্ভার আশা করে যে অনুরোধটিতে পরিবর্তনযোগ্য সাবফিল্ডগুলির জন্য ফিল্ড মাস্ক উপস্থিত থাকবে। কিন্তু, এই পরিস্থিতিতে FieldMasks স্বয়ংক্রিয়ভাবে সাবফিল্ড মাস্ক তৈরি করতে পারে না, কারণ অনুরোধটিতে কোনো সাবফিল্ড সেট করা হয়নি।

এইসব ক্ষেত্রে, আপনি fieldMask.Paths এ (যা একটি RepeatedField<string> ) ম্যানুয়ালি পাথ যোগ করতে পারেন:

// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
    ResourceName = ResourceNames.Campaign(customerId, campaignId),
};

FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
// Only include 'maximize_conversions.target_cpa_micros' in the field mask
// as it is the only mutable subfield on MaximizeConversions when used as a
// standard bidding strategy.
//
// Learn more about standard and portfolio bidding strategies at:
// https://developers.google.com/google-ads/api/docs/campaigns/bidding/assign-strategies
fieldMask.Paths.Add("maximize_conversions.target_cpa_micros");

// Creates an operation to update the campaign with the specified fields.
CampaignOperation operation = new CampaignOperation()
{
    Update = campaign,
    UpdateMask = fieldMask
};

পরিষ্কার মাঠ

গুগল অ্যাডস এপিআই কিছু ফিল্ডের মান মুছে ফেলার সুবিধা দেয়। কোনো ফিল্ডের মান মুছে ফেলতে হলে, আপনাকে অবশ্যই ফিল্ড মাস্কে সেই ফিল্ডটি ম্যানুয়ালি অন্তর্ভুক্ত করতে হবে এবং রিসোর্স অবজেক্টে সেটিকে আনসেট রাখতে হবে। কোনো ফিল্ডকে তার ডিফল্ট মানে (যেমন একটি int64 ফিল্ডের জন্য 0 ) সেট করলে ফিল্ডটি মুছে যায় না।

নিম্নলিখিত কোড উদাহরণটি দেখায় কিভাবে একটি MaximizeConversions বিডিং স্ট্র্যাটেজির target_cpa_micros ফিল্ডটি খালি করতে হয়:

সঠিক কোড

নিম্নলিখিত কোডটি target_cpa_micros ফিল্ডটিকে খালি করে দেয়, কারণ এটি campaign.MaximizeConversions.TargetCpaMicros প্রপার্টিটি সেট না করেই maximize_conversions.target_cpa_micros কে ফিল্ড মাস্কে যোগ করে দেয়:

// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
    ResourceName = ResourceNames.Campaign(customerId, campaignId),
};

// Constructs a field mask from the existing campaign and adds the
// 'maximize_conversions.target_cpa_micros' field to the field mask, which
// clears this field from the bidding strategy without impacting any other
// fields on the bidding strategy.
FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
fieldMask.Paths.Add("maximize_conversions.target_cpa_micros");

// Creates an operation to update the campaign with the specified field.
CampaignOperation operation = new CampaignOperation()
{
    Update = campaign,
    UpdateMask = fieldMask
};

ভুল কোড

নিম্নলিখিত কোডটি target_cpa_micros ফিল্ডটি খালি করে না , কারণ এটি ফিল্ডটির মান 0 সেট করে দেয়। যখন TargetCpaMicros মান 0 হয় অথবা মাস্ক থেকে পাথটি বাদ দেওয়া হয়, তখন FieldMasks ইউটিলিটি এবং Google Ads API সার্ভার উভয়ই এই মানটিকে উপেক্ষা করে এবং সার্ভার কোনো ত্রুটিও দেখায় না।

// Creates a campaign with the proper resource name and a
// MaximizeConversions object. Attempts to clear the target_cpa_micros
// field by setting it to 0.
Campaign campaign = new Campaign()
{
    ResourceName = ResourceNames.Campaign(customerId, campaignId),
    MaximizeConversions = new MaximizeConversions()
    {
        TargetCpaMicros = 0
    }
};

// Constructs an operation using FieldMasks.AllSetFieldsOf to derive the
// update mask.
CampaignOperation operation = new CampaignOperation()
{
    Update = campaign,
    UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};

// Sends the operation in a mutate request that succeeds without clearing
// the previous 'target_cpa_micros' value cleanly.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
    customerId.ToString(), new CampaignOperation[] { operation });